Java/Java 기본

상속과 생성자

검정비니 2018. 7. 3. 18:31
728x90
반응형

상속과 생성자



1. 서브 클래스와 슈퍼 클래스의 생성자 호출 및 실행 관계


상속 관계에 있는 서브 클래스와 슈퍼 클래스는 각각 생성자를 가지고 있다. 두 생성자들의 관계에 대해서 일반적으로 혼동하는 부분에 대해서 알아보도록 하자.



Q1. 서브 클래스의 인스턴스가 생성될 때 서브 클래스의 생성자와 슈퍼 클래스의 생성자가 모두 실행되는가? 아니면 서브 클래스의 생성자만 실행되는가?


A1. 둘 다 실행된다. 생성자는 인스턴스를 초기화할 목적으로 사용되므로 서브 클래스의 생성자는 서브 클래스 내의 멤버를 초기화하거나 필요한 초기화 작업을 수행할 필요가 있고, 슈퍼 클래스의 생성자는 슈퍼 클래스의 멤버를 초기화하거나 필요한 초기화 작업을 수행할 필요가 있기 때문이다.



Q2. 서브 클래스의 인스턴스가 생성될 때 서브 클래스의 생성자와 슈퍼 클래스의 생성자의 실행 순서는 어떻게 되는가?


A2. 슈퍼 클래스의 생성자가 먼저 실행된 후 서브 클래스의 생성자가 실행된다.




아래의 이미지를 통해서 자세히 알아보도록 하자.

new C();라는 문장을 통해서 C()가 호출된다. 클래스 C가 B를 상속받기 때문에 C()의 첫 줄을 실행시키기 전에 B() 생성자가 호출된다. 마찬가지로, B 클래스는 A 클래스를 상속받기 때문에 A() 생성자가 호출된다. A()를 다 처리한 다음에 다시 B() 생성자로 돌아와서 문장들을 처리한다. 그 후에 다시 C() 생성자로 돌아와서 C 타입의 객체를 만든다.



2. super()


만약, 슈퍼 클래스에 생성자가 여러 개 있고, 그 중에서 특별히 하나를 사용하고 싶다면, super()를 사용하면 된다. 그 이름을 통해서 알 수 있듯이, super()는 원하는 슈퍼 클래스의 생성자를 부를 수 있게 해준다.


i.e.

class A {

A() {

...

}


A(int a) {

...

}

}


class B extends A {

B() {

super(2);

}

}



참고로, this()와 this처럼 super()이 슈퍼 클래스의 생성자를 부르는 키워드이고 super는 부모 객체를 나타내는 키워드이다.

반응형