쌓고 쌓다
[JAVA] super() 과 상속에서의 생성자 순서 본문
슈퍼 클래스와 서브 클래스의 생성자 실행 순서
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() 키워드가 생성자의 첫줄에 와야한다는것이 중요하다.
'프로그래밍 > java' 카테고리의 다른 글
[JAVA] 메소드 오버라이딩 / super 키워드 (0) | 2021.12.26 |
---|---|
[JAVA] 업 캐스팅, 다운 캐스팅 / instanceof 연산자 (0) | 2021.12.25 |
[JAVA] final 키워드 (0) | 2021.12.24 |
[JAVA] static / 전역 함수, 전역 변수 (0) | 2021.12.23 |
[JAVA] 접근 지정 (0) | 2021.12.22 |
Comments