반응형
이번 글에서는 클래스 간 상속 관계를 기반으로 한 자동 타입 변환,
즉 업캐스팅(Promotion) 을 학습합니다.
자식 클래스 객체를 부모 클래스 타입으로 자동 변환할 수 있으며,
이 구조는 다형성(Polymorphism)의 핵심 기반이 됩니다.
📌 실행 코드 (PromotionExample.java)
class A {
}
class B extends A {
}
class C extends A {
}
class D extends B {
}
class E extends C {
}
public class PromotionExample {
public static void main(String[] args) {
B b = new B();
C c = new C();
D d = new D();
E e = new E();
A a1 = b;
A a2 = c;
A a3 = d;
A a4 = e;
B b1 = d;
C c1 = e;
// B b3 = e; // (X) 컴파일 오류
// C c2 = d; // (X) 컴파일 오류
}
}
💬 코드 설명
- B, C, D, E는 모두 A를 직접 또는 간접적으로 상속
- 자식 객체를 부모 타입 변수에 자동으로 할당 가능
- A a1 = b;, A a3 = d; 등 → 자동 타입 변환 (업캐스팅)
- B b1 = d; → D는 B의 자식이므로 가능
- C c1 = e; → E는 C의 자식이므로 가능
- ❌ B b3 = e;, C c2 = d;
→ 서로 형제 관계거나 상속 관계가 없으므로 변환 불가능
📌 상속 관계 계층도
A
/ \
B C
/ \
D E
📌 간단 정리
선언 타입 | 대입 가능한 객체 |
A | A, B, C, D, E |
B | B, D (자기 자신과 자식만) |
C | C, E |
❌ B ← E | 오류 (상속 관계 없음) |
💡 포인트 정리
- 자식 객체는 부모 타입으로 자동 변환 가능 (업캐스팅)
- 업캐스팅은 명시적 형변환 없이도 가능
- 반대 방향(다운캐스팅)은 명시적 형변환 + 안전성 검사 필요
- 다형성 기반 구조에서 매우 자주 사용됨 (List list = new ArrayList(); 등)
'Java > 자바 정리' 카테고리의 다른 글
64. 필드의 다형성 – 하나의 타입으로 다양한 객체 다루기 (1) | 2025.05.07 |
---|---|
63. 다운캐스팅(Downcasting)과 참조 타입의 한계 (0) | 2025.05.07 |
62. 다형성 (Polymorphism) – 부모 타입으로 자식 객체 참조하기 (0) | 2025.05.07 |
60. protected 접근 제한자 - 상속과 패키지에 따른 접근 제어 (0) | 2025.05.07 |
59. final 메서드 – 오버라이딩을 금지하기 (0) | 2025.05.07 |
[ 간단 정리 57+ ] 자바, 오버라이딩과 오버로딩의 차이점 (0) | 2025.05.07 |