ex) Animal animal = new Dog(); (업캐스트)
다형성을 위해 사용
업캐스트 된 것만 다운캐스트 가능
다운캐스트는 캐스트연산자 생략불가
다운캐스트를 하기 위해서는 업캐스트가 먼저 이루어져야 하며, instanceof 연산자를 사용하여 적절한 캐스팅이 가능한지 확인한 후에 캐스팅을 수행해야 합니다. 캐스팅이 불가능한 경우 ClassCastException이 발생할 수 있다는 것입니다.
ex) Dog dog = (Dog) animal; // animal이 Dog 클래스의 객체일 때 가능(다운캐스트)
부모 클래스의 타입으로 자식 클래스 객체를 참조 할 때 업캐스트를 사용하고, 자식 클래스의 타입으로 부모 클래스 객체를 참조할 때 다운캐스트를 사용합니다.
boolean result = 좌항(객체) instanceof 우항(타입)
Parent parent = new Parent();
Child child = (Child) parent;
public void method(Parent parent) {
if(parent instanceof Child) {
Child child = (Child) parent;
}
}
클래스 타입 변환 : 다른 클래스 타입으로 객체를 대입
자동 타입 변환 : 자식 객체를 부모 타입 변수에 대입할 때에는 자동으로 타입이 변환됨
강제 타입 변환 : 부모 타입 객체를 다시 자식 타입에 대입할 때 강제 타입 변환일 필요
instanceof 연산자 : 객체가 어떤 타입인지 조사할 때 instanceof 연산자 사용
다형성: 객체 사용 방법은 동일하나 실행결과가 다양하게 나오는 성질 메소드 재정의와 타입 변환으로 구현