[Java] 상속과 생성자

2020. 4. 21. 19:35Programming Languages/Java

서브 클래스와 슈퍼 클래스 각각 생성자를 가지고 있다. 그렇다면 생성자의 실행은 어떻게 될까?

 

> 둘 다 실행되며, 슈퍼 클래스의 생성자가 먼저 생성된 후 서브 클래스의 생성자가 생성된다.

 

예를 들어, class A, class B extends A, class C extends B 이렇게 상속 관계가 있다고 하자.

메인에서 class C의 객체를 생성하면

    class A {

  3. A 생성자 호출

        public A() {

        }                              4. A 생성자 리턴

    }

    class B extends A{

   2. B 생성자 호출 

       public B() {

        }                             5. B 생성자 리턴

    }

    class C extends B {

    1. C 생성자 호출

        public C() {

        }                               6. C 생성자 리턴

    }

   public class Main {

     public static void main(String [] args) {

           C c = new C();       

        }

    }

 

위처럼 슈퍼 클래스의 생성자를 먼저 호출하여 최상위 슈퍼 클래스의 생성자부터 리턴을 한다.

그렇다면 서브 클래스에서 슈퍼 클래스의 생성자를 지정하려면 어떻게 해야할까?

> super()를 이용하여 슈퍼 클래스의 생성자를 명시적으로 선택할 수 있다.

 

원칙적으로, 개발자는 서브 클래스의 각 생성자에 대해, 함께 실행될 슈퍼 클래스의 생성자를 지정해야 한다. 하지만 개발자가 이를 지정하지 않은 경우에는 컴파일러가 자동으로 슈퍼 클래스의 기본 생성자를 호출하도록 컴파일한다. 만약 기본 생성자와 다르게 작성한 후 서브 클래스에서 이를 지정하지 않고 호출할 경우 오류가 발생한다. 따라서 super()를 이용하여 명시적으로 슈퍼 클래스의 생성자를 지정해야 한다.

super()를 사용할 때 주의할 점 - 생성자의 첫 라인에 사용해야 한다.