반응형
이번 글에서는 상속 구조에서 부모 타입으로 자식 객체를 참조할 때의 제한과,
자식 클래스의 고유 기능을 사용하려면 필요한 다운캐스팅(강제 형변환) 방법을 학습합니다.
📦 부모 클래스 (Parent.java)
package ch07.sec07.exam03;
public class Parent {
public String field1;
public void method1() {
System.out.println("Parent-method1()");
}
public void method2() {
System.out.println("Parent-method2()");
}
}
📦 자식 클래스 (Child.java)
package ch07.sec07.exam03;
public class Child extends Parent {
public String field2;
public void method3() {
System.out.println("Child-method3()");
}
}
📌 실행 코드 (ChildExample.java)
package ch07.sec07.exam03;
public class ChildExample {
public static void main(String[] args) {
Parent parent = new Child(); // 자동 타입 변환 (업캐스팅)
parent.field1 = "data1";
parent.method1();
parent.method2();
// parent.field2 = "data2"; // (X) 접근 불가
// parent.method3(); // (X) 접근 불가
Child child = (Child) parent; // 강제 타입 변환 (다운캐스팅)
child.field2 = "data2"; // (O)
child.method3(); // (O)
}
}
💬 코드 설명
- Parent parent = new Child();
→ 자식 객체를 부모 타입으로 참조하는 업캐스팅 - parent.method1() / method2()
→ 부모 타입에 정의된 메서드만 접근 가능 - parent.field2, method3()
→ ❌ 부모 타입에는 정의되어 있지 않아 컴파일 오류 - Child child = (Child) parent;
→ 다시 자식 타입으로 강제 형변환 (다운캐스팅) - 이후에는 자식 클래스의 필드와 메서드도 모두 사용 가능
💻 실행 결과
Parent-method1()
Parent-method2()
Child-method3()
📌 간단 정리
참조 변수 타입 | 접근 가능 멤버 |
Parent | field1, method1(), method2() |
Child | field1, field2, method1(), method2(), method3() |
💡 포인트 정리
- 부모 타입으로 자식 객체를 참조하면 자식의 고유 멤버에는 접근 불가
- 자식 타입으로 강제 형변환(다운캐스팅)하면 자식의 멤버 사용 가능
- 전제 조건: 진짜 자식 객체일 경우에만 안전하게 다운캐스팅 가능
- 다운캐스팅 전에 instanceof 검사로 안전성 확인 가능
📌 정리하자면,
다형성 구조에서는 부모 타입으로 다양한 자식 객체를 다룰 수 있지만,
고유한 기능을 사용하려면 형변환이 필요하다는 점을 꼭 기억해야 해야합니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
66. 추상 클래스(Abstract Class) - 직접 생성 불가, 공통 기능 정의 (0) | 2025.05.08 |
---|---|
65. 매개변수의 다형성 – 하나의 메서드로 여러 객체 동작시키기 (0) | 2025.05.08 |
64. 필드의 다형성 – 하나의 타입으로 다양한 객체 다루기 (1) | 2025.05.07 |
62. 다형성 (Polymorphism) – 부모 타입으로 자식 객체 참조하기 (0) | 2025.05.07 |
61. 자동 타입 변환 (Promotion) - 상속 관계에서의 업캐스팅 (0) | 2025.05.07 |
60. protected 접근 제한자 - 상속과 패키지에 따른 접근 제어 (0) | 2025.05.07 |