부모클래스의 타입으로 객체를 생성할 시 Upcasting으로 자동형변환이 된다.
하지만, 자식클래스의 타입으로 부모클래스 객체를 생성할 시 부모클래스의 타입을 강제로 자식클래스로 내려줘야 하는데 이것을 Downcasting(강제형변환)이라고 한다.
Upcasting으로 객체를 생성할 시 부모클래스의 멤버는 자유롭게 사용가능하지만 자식클래스에 따로 설계한 멤버들에는 접근이 불가능하다.
이 경우, Downcasting을 통해 부모클래스를 자식클래스로 낮춰서 자식클래스에 접근할 수 있도록 객체를 생성한다.
public class ObjectCasting {
public static void main(String[] args) {
Animal animal = new Cat();
ani.eat(); // 오버라이드로 재정의한 eat()메서드에 접근가능
ani.night(); // error, 자식클래스에만 따로 설계한 night()메서드에는 접근 불가
Cat c = (Cat).ani; // Downcasting으로 부모 타입을 자식 타입으로 내림
c.night(); // 자식 클래스에 접근 가능
}
}