2020. 4. 21. 19:35ㆍProgramming 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()를 사용할 때 주의할 점 - 생성자의 첫 라인에 사용해야 한다.
'Programming Languages > Java' 카테고리의 다른 글
[Java] 메소드 오버라이딩(method overriding) (0) | 2020.04.27 |
---|---|
[Java] 업캐스팅, 다운캐스팅, instanceof (0) | 2020.04.27 |
[Java] 상속과 접근 지정자 (0) | 2020.04.21 |
[Java] 상속(extends) (0) | 2020.04.21 |
[Java] final 키워드 (0) | 2020.04.18 |