쌓고 쌓다

[JAVA] super() 과 상속에서의 생성자 순서 본문

프로그래밍/java

[JAVA] super() 과 상속에서의 생성자 순서

승민아 2021. 12. 25. 19:57

슈퍼 클래스와 서브 클래스의 생성자 실행 순서

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() 키워드가 생성자의 첫줄에 와야한다는것이 중요하다.

 

Comments