on
[JAVA] suepr() 과 상속에서의 생성자 순서
[JAVA] suepr() 과 상속에서의 생성자 순서
슈퍼 클래스와 서브 클래스의 생성자 실행 순서
class A { A() { System.out.println("A 생성자 실행"); } } class B extends A { B() { System.out.println("B 생성자 실행"); } } class C extends B { C() { System.out.println("C 생성자 실행"); } } public class Main{ public static void main(String[] args) { C c = new C(); } }
실행 결과
C는 B를 상속받고, B는 A를 상속받는 구조이다.
여기서 C 클래스의 객체를 생성하면 A-B-C순서로 생성자가 실행 된다.
즉, 슈퍼 클래스의 생성자를 먼저 실행한다. 그 후 서브 클래스의 생성자를 실행한다.
슈퍼 클래스 생성자 실행 -> 서브 클래스 생성자 실행
서브 클래스에서 슈퍼 클래스 생성자 선택
슈퍼 클래스에 생성자가 여러개 있는 경우 기본적으로 기본 생성자가 실행된다.
기본 생성자가 존재하지 않는 경우( 생성자가 하나라도 존재한다면 기본 생성자는 자동으로 안 생김) 컴파일 에러 발생.
class A { A() { System.out.println("A 기본 생성자 실행"); } A(int num) { System.out.println("A에서 num을 받는 생성자 실행"); } } class B extends A { B() { System.out.println("B 기본 생성자 실행"); } B(int num) { System.out.println("B에서 num을 받는 생성자 실행"); } } public class Main{ public static void main(String[] args) { B b = new B(5); } }
실행 결과
super()을 이용한 슈퍼 클래스의 생성자 선택
class A { A() { System.out.println("A 기본 생성자 실행"); } A(int num) { System.out.println("A에서 num을 받는 생성자 실행"); } } class B extends A { B() { System.out.println("B 기본 생성자 실행"); } B(int num) { super(5); // 첫줄에 와야함 System.out.println("B에서 num을 받는 생성자 실행"); } } public class Main{ public static void main(String[] args) { B b = new B(5); } }
실행 결과
super 키워드는 슈퍼 생성자의 선택이 가능하다.
해당하는 생성자에 맞춰 슈퍼 생성자를 실행한다.
super() 키워드가 생성자의 첫줄에 와야한다는것이 중요하다.
from http://non-stop.tistory.com/23 by ccl(A) rewrite - 2021-12-25 20:02:17