Java 다형성 - 캐스팅
상속 할당과 관련된 다운 캐스팅을 코드로 살펴보도록 한다.
생성한 코드와 경로
src
└Poly
├Parent.java
├Child.java
└PolyMain.java
Parent.java
package poly;
public class Parent {
void parentMethod() {
System.out.println("This is Parent");
}
}
Child.java
package poly;
public class Child extends Parent{
void childMethod() {
System.out.println("This is Child");
}
}
PolyMain.java
package poly;
public class PolyMain {
public static void main(String[] args) {
// 자식 변수 생성
// 생성한 자식 변수에게 인스턴스 참조
System.out.println("== Parent To Child ==");
Parent parent = new Child();
System.out.println("======================");
System.out.println();
// 자식 클래스의 childMethod 를 호출할 수 없다.
// parent.childMethod(); // 컴파일 오류
System.out.println("== (Child) Parent To Child ==");
// 다운 캐스팅 사용 (부모 타입 > 자식 타입)
Child child = (Child) parent;
child.childMethod();
System.out.println("======================");
}
}
실행결과
== Parent To Child ==
======================
== (Child) Parent ==
This is Child
======================
부모 변수에 자식 클래스 할당
Parent parent = new Child();
parent.childMethod(); // 컴파일 오류
parent 변수는 Parent 타입으로 초기화 되었다. Parent 타입은 호출한 메소드를 찾을 수 없어서 parent.childMethod()
코드를 호출할 수 없었다.

캐스팅
- 업캐스팅 (upcasting): 부모 타입으로 변경
- 다운캐스팅 (downcasting): 자식 타입으로 변경
다운 캐스팅
Parent parent = new Child();
Child child = (Child) parent;
child.childMethod()
새로운 Child 타입으로 child 생성하였다. parent 변수는 강제로 Child 클래스로 다운 캐스팅되어 child 에게 할당하여 child.childMethod()
코드를 호출할 수 있었다.

업 캐스팅
생성한 child
를 다시 Parent 클래스로 할당하고 싶은 경우, 캐스트 (..)
키워드를 사용하지 않고도 업 캐스팅을 할 수 있다.
Parent parent = new Child();
Child child = (Child) parent;
Parent p2 = child;
p2.parentMethod();