[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