상속을 활용한 생성자 호출
2024. 11. 28. 14:37ㆍ정보처리,전산/JAVA
반응형
// 클래스 A: 최상위 클래스
class A {
// 기본 생성자: 호출되면 "10" 출력
A() {
System.out.println(10);
}
}
// 클래스 B: A를 상속받음
class B extends A {
// 매개변수 있는 생성자
B(int a) {
super(); // 부모 클래스 A의 생성자를 명시적으로 호출
System.out.println(a); // 전달받은 매개변수 a 출력
}
}
// 클래스 C: B를 상속받음
class C extends B {
// 매개변수 있는 생성자
C(int a) {
super(a * 10); // 부모 클래스 B의 생성자를 호출하면서 a * 10 값을 전달
System.out.println(a); // 전달받은 매개변수 a 출력
}
}
// 테스트 클래스
public class Test {
public static void main(String args[]) {
// C 클래스 객체 생성 (업캐스팅: C -> A)
A b = new C(1000);
}
}
주요 로직과 실행 순서
- A b = new C(1000);
- C 클래스의 객체를 생성한다.
- C 클래스의 생성자가 호출되면서 상속 구조에 따라 상위 클래스 생성자가 호출된다.
- 호출 흐름:
- C(int a):
- super(a * 10) 호출 → B(int a) 실행
- B(int a):
- super() 호출 → A() 실행
- A():
- System.out.println(10); 출력
- 이후 각 생성자의 로직이 실행된다.
- C(int a):
코드 분석
- class A:
- 기본 생성자 A()를 가지고 있으며, 호출 시 System.out.println(10);을 실행한다.
- class B extends A:
- B 클래스는 A 클래스를 상속받는다.
- B(int a) 생성자는 super();를 통해 부모 클래스 A의 생성자를 호출한 후, 인자로 받은 a 값을 출력한다.
- class C extends B:
- C 클래스는 B 클래스를 상속받다.
- C(int a) 생성자는 super(a * 10);을 통해 부모 클래스 B의 생성자를 호출한 후, 인자로 받은 a 값을 출력한다.
- public class Test:
- main 메서드에서 C(1000)을 호출하여 C 클래스의 객체를 생성한다.
- A b = new C(1000);로 선언되었기 때문에 업캐스팅(부모 타입 참조) 형태로 객체를 생성한다.
- C(1000) 호출 → super(a * 10)로 B(10000) 호출
- B(10000) 호출 → super()로 A() 호출
- A() 실행 → System.out.println(10);
- B(10000) 실행 → System.out.println(10000);
- C(1000) 실행 → System.out.println(1000);
반응형
'정보처리,전산 > JAVA' 카테고리의 다른 글
compiler subsystem (0) | 2024.12.21 |
---|---|
Java 문자와 숫자 비교 | 캐스팅 | 대문자 소문자 | 문자 빈도 수 (0) | 2024.11.21 |
HTTP GET 및 POST 요청을 처리하는 방법 (0) | 2024.11.15 |
final 키워드 (1) | 2024.09.17 |
환경 변수 설정한 JAVA 버전 확인이 안될 때 (0) | 2024.08.08 |