1) 하위 클래스에 의해 가려진 상위 클래스의 멤버 변수나 메소드에 접근할 때
▷ super.객체변수
▷ super.메소드이름(매개변수)
2) 상위 클래스의 생성자를 호출할 때
▷ super(매개변수)
▷ super문장은 반드시 첫 번째 라인에 와야 한다
4) this( )가 자신의 생성자를 호출하기 위해 제공되는 예약어라면 수퍼클래스의 생성자를 호출하기 위해서는 super( ) 예약어가 제공.
5) 만일 매개 변수가 있는 수퍼 클래스의 생성자를 호출하고 싶은 경우에는 super(매개 변수)라고 호출.
6) 주의할 점은 수퍼 클래스의 생성자를 호출하는 위치이다. 서브 클래스의 생성자에서 무엇보다도 수퍼 클래스의 생성자를 제일 먼저 호출해주어야 함
class Parent3 {
Parent3 () {
System.out.println("1. 매개변수 없는 조상 생성자 Parent3");
}
Parent3 (int x) {
this(); // 자신 Class의 생성자 //매개변수가 없으므로 자신의 기본생성자 찾아간다.
System.out.println("매개변수 1개 Parent3 : x = " + x);
}
}
class Child3 extends Parent3 {
int x = 66;
Child3(int x) { // 부모의 생성자는 무조건 생성한다. 만일 부모를 호출하는 생성자가 없다면 부모의 기본생성자를 호출한다.
// 부모의 끝까지 생성자를 생성한다.
// Parent3 기본 생성자
super(x); // 만일 이게 있다고 하면 다르게 생성된다.
System.out.println("2. child3 매개변수 1개 child3 : x = " + x);
}
Child3(int x , int y) {
this(x); //자신 Class의 1개 매개변수 생성자
System.out.println("3. Child 매개변수 2개 부모 : x = " + x + " , y " + y);
}
}
class Child5 extends Child3 {
Child5(int x, int y) {
super(x,y); // Child3 Class의 2개 매개변수 생성자 //이게 없다고 가정하면
// child5의 부모인 child3의 기본생성자를 호출하게 되는데 기본생성자가 없기 때문에 error남
// child3의 생성자가 있기 때문에 기본생성자도 못만들어서 error남
System.out.println("4. Child5 매개변수 2개 자식 : x = " + x + " , y " + y );
System.out.println(super.x);
}
void cc5() {
System.out.println("child5 cc5 메소드....");
}
}
public class Super3 {
public static void main(String[] args) {
Child5 Child5 = new Child5(7, 15);
}
}
- 매개변수 없는 조상 생성자 Parent3
매개변수 1개 Parent3 : x = 7- child3 매개변수 1개 child3 : x = 7
- Child 매개변수 2개 부모 : x = 7 , y 15
- Child5 매개변수 2개 자식 : x = 7 , y 15
66