20.03 ~ 20.08 국비교육/JAVA

클래스 상속관계에서의 생성자

찹키리 2020. 3. 27. 01:19

<상속 + 생성자>

 

1)순서(실행, 변수 초기화)

: 상속관계에서 생성자는 상위 클래스 생성자부터 실행된다. 즉, 실행과 변수 초기화 모두 상위클래스부터 시작한다.
상속관계에서는 최초의 부모 클래스가 있기 때문에 하위 클래스가 있을 수 있다는 확장의 개념으로 접근하는 것이 좋다. 바로 위의 상위 클래스를 호출하면(명시적 호출), 그 상위 클래스의 생성자도 자동 호출된다.(암시적 호출)

연결이 끊어지면 바로 위 생성자 자동 호출한다. 

 

 

2)기본 생성자의 필요성

:인자가 있는 생성자가 있는 경우는 기본 생성자가 자동으로 만들어지지 않기 때문에 오류 뜨기 십상 
기본 생성자는 습관적으로 만들기 


 

 

<예제1>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
class TV {
    public TV() {
        System.out.println("TV");
    }
//실행1
 
class Movie extends TV {
    String prat = "";
 
    public Movie() {
    }
 
    public Movie(String part) {
        this.part = part;
        System.out.println("Movie");
    }
//실행2
 
class Comedy extends Movie {
    String time = "";
    String name = "";
 
    public Comedy() {}
 
    public Comedy (String time, String name, String part) {
        super(part);
        this.time = time;
        this.name = name;
        System.out.println("Comedy");
    }
//실행3
 
public class MovieTest {
    public static void main(String args[]) {
    Comedy com = new Comedy("21:00""마파도""한국영화");
    System.out.println(com.time);
    System.out.println(com.name);
    System.out.println(com.part);
 
    Comedy com2 = new Comedy();
    com2.time = "17:00";
    com2.name = "가문의 영광";
    com2.part = "한국영화";
    System.out.println(com.time);
    System.out.println(com.name);
    System.out.println(com.part);
    } //실행4
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

생성자를 호출하면 가장 상위 클래스부터 실행된다.(암시적 호출)

 

출력값:

TV

Movie

Comedy

21:00

한국영화

마파도

TV

17:00

한국영화

가문의 영광

 

 

 

<예제2>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
class OverC {
    int i, j;
 
    public OverC(int i, int j) {
        this.i = i;
        this.j = j;
    }
 
    void show() {
        System.out.println("상위클래스의 메소드 show() 수행");
    }
}
 
class SubOverC extends OverC {
    int k;
 
    public SubOverC(int i, int j, int k) {
        super(i, j); //초기화 순서 주의 -> 상위클래스부터 작성
        this.k = k;
    }
 
    void show() {
        System.out.println("하위 클래스의 메소드 show() 수행");
        System.out.println("===super를 이용한 상위 클래스 메소드 호출===");
        super.show(); //인스턴스 호출
    }
}
 
class SuperExam {
    public static void main(String args[]) {
        SubOverC over1 = new SubOverc(102030);
        
        System.out.println("i, j, k의 값: " + over1.i + " " + over1.j + " " + over1.k)
        over1.show();
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

*변수 초기화 
하위 인스턴스를 생성할 때 a, b, c 변수를 초기화하려면 상위 클래스부터 차례로 a, b ,c 순서로 초기화 해야한다.

'20.03 ~ 20.08 국비교육 > JAVA' 카테고리의 다른 글

상수  (0) 2020.03.28
추상 클래스(Abstract class) vs 인터페이스  (0) 2020.03.27
상속, 오버라이딩(Overriding)  (0) 2020.03.26
Garbage collection  (0) 2020.03.26
접근제한자  (0) 2020.03.26