728x90
자식 클래스의 생성자가 호출되면 부모 클래스의 생성자가 자동으로 먼저 호출됩니다. 이때, 기본 생성자를 명시적으로 호출하지 않으면 자식 클래스 생성자에서 암묵적으로 부모 클래스의 기본 생성자가 호출됩니다.
자세한 설명
- 부모 클래스 생성자 호출: 자식 클래스 생성자가 호출될 때, 자식 클래스가 부모 클래스의 필드나 메서드를 상속받기 때문에, 부모 클래스의 생성자가 먼저 호출되어 부모 클래스의 인스턴스가 초기화됩니다.
- 부모 클래스의 기본 생성자가 없을 경우, 자식 클래스는 명시적으로 부모 클래스의 생성자를 호출해야 합니다. 이를 위해 super()를 사용합니다.
- 상속 관계에서의 생성자 호출 순서:
- 자식 클래스의 생성자가 호출되면, 부모 클래스의 생성자가 먼저 호출되고, 그 후 자식 클래스의 생성자가 실행됩니다.
코드 분석
class Parent {
int x = 100;
Parent() {
this(500); // Parent(int x) 생성자를 호출
}
Parent(int x) {
this.x = x; // Parent 클래스의 x 값 설정
}
int getX() {
return x;
}
}
class Child extends Parent {
int x = 4000;
Child() {
this(5000); // Child(int x) 생성자를 호출
}
Child(int x) {
this.x = x; // Child 클래스의 x 값 설정
}
}
public class Main {
public static void main(String[] args) {
Child obj = new Child();
System.out.println(obj.getX());
}
}
실행 과정:
- Child obj = new Child();이 호출되면, 먼저 자식 클래스의 기본 생성자 Child()가 호출됩니다.
- this(5000);을 통해 Child(int x) 생성자가 호출됩니다.
- Child(int x) 생성자는 this.x = 5000;을 실행하여 자식 클래스의 x 값을 5000으로 설정합니다.
- 자식 클래스의 생성자를 호출할 때, 부모 클래스의 생성자가 자동으로 호출됩니다.
- Parent() 기본 생성자가 호출됩니다. 이 생성자는 내부에서 this(500);을 호출하여 Parent(int x) 생성자를 호출합니다.
- Parent(int x)는 부모 클래스의 x 값을 500으로 설정합니다.
- System.out.println(obj.getX());에서 getX()는 부모 클래스의 메서드이므로, 부모 클래스의 x 값(500)을 출력합니다.
결과:
500
중요한 점:
- 부모 생성자는 자동으로 호출됩니다. 자식 클래스의 생성자가 실행되기 전에 부모 클래스의 생성자가 먼저 실행됩니다.
- 자식 클래스에서 super()를 사용하여 명시적으로 부모 생성자를 호출할 수 있으며, 명시적으로 호출하지 않으면 부모 클래스의 기본 생성자가 자동으로 호출됩니다.
728x90
'Category > 정보처리기사' 카테고리의 다른 글
SSO(Single Sign-On)란? (1) | 2024.10.10 |
---|---|
GROUP BY와 HAVING에 대한 설명 (0) | 2024.10.10 |
이진수를 십진수로 변환하는 방법 (0) | 2024.10.10 |
포트 번호란? (1) | 2024.10.10 |
네트워크 전송 기술과 주요 프로토콜 정리 (3) | 2024.10.10 |