\
super - 생성자
<aside> 🪧
설명
필수 규칙
예제
package super2;
public class ClassA {
public ClassA() {
System.out.println("ClassA 생성자");
}
}
--------------------
package super2;
public class ClassB extends ClassA {
public ClassB(int a) {
super();
System.out.println("ClassB 생성자 a = " + a);
}
public ClassB(int a, int b) {
super();
System.out.println("ClassB 생성자 a= " + a + " b= " + b);
}
}
* 위 코드처럼 상속을 받으면 생성자의 첫 줄에 super(...)를 사용해서 부모 클래스의
생성자를 호출해줘야 함
* 부모 클래스의 생성자가 기본 생성자(파라미터가 없는 생성자)인 경우에는 super()를
생략 가능
* 기본 생성자를 많이 사용하기 때문에 편의상 이런 기능을 제공
------------------------
package super2;
public class ClassC extends ClassB {
public ClassC() {
super(10, 20);
System.out.println("ClassC 생성자");
}
}
하지만 ClassB를 보면 생성자 한 개는 int a를 받고 나머지는 int a, inb를 받는 것을
볼수 있듯이 ClassB를 상속받은 ClassC에는 super(...) 안에 값을 넣어줘야하고
생략을 할수 없음.
-------------------------
package super2;
public class Super2Main {
public static void main(String[] args) {
ClassC classC = new ClassC();
}
}
출력
ClassA 생성자
ClassB 생성자 a= 10 b= 20
ClassC 생성자
동작

1~3 동작.
new ClassC()를 통해 ClassC 인스턴스 생성, 이때 ClassC()의 생성자가 먼저 호출,
하지만 ClassC()의 생성자는 가장 먼저 super()를 통해 ClassB(…) 생성자를 호출,
ClassB()의 생성자도 부모인 ClassA()의 생성자를 가장 먼저 호출
4~6 동작.
ClassA()의 생성자는 최상위 부모로 생성자 코드를 실행하여 “ClassA 생성자” 출력,
ClassA() 생성자 호출이 끝나면 ClassA()를 호출한 ClassB(…) 생성자로 제어권이 돌아감
ClassB(…) 생성자가 코드를 실행하면서 “ClassB 생성자 a=10 b=20” 출력,
이후 ClassB(…)를 호출한 ClassC()의 생성자로 제어권이 돌아감
ClassC()가 마지막으로 생성자 코드를 실행하여 “ClassC 생성자”를 출력
</aside>
this(…)와 함께 사용
<aside> 🔋
설명
예제


</aside>