상위클래스로 업캐스팅을 한 경우에는 메소드가 오버라이딩된 경우를 제외하면,
생성된 인스턴스의 멤버변수나 메소드를 사용할 수 없게 된다.
생성된 인스턴스의 멤버변수나 메소드를 사용해야할 때 다운캐스팅을 사용할 수 있다.
📒 다운캐스팅 방법 1. 변수에 저장하기
//하위클래스 새로운이름 = (하위클래스) 다운캐스팅하고 싶은 업캐스팅된 인스턴스;
Zealot unit_down = (Zealot) unit_up;
//unit_down는 원래 인스턴스의 맴버변수나 메소드를 사용할 수 있게 된다.
unit_down.attack();
📒 다운캐스팅 방법 2. 변수에 저장하지 않고 메소드나 멤버변수를 바로 실행
((Zealot) unit_up).attack();
⚠️ 주의할 점
다운캐스팅은 업캐스팅한 인스턴스만 가능하고 원래의 인스턴스 자료형이 아닌 다른 자료형으로 형변환을 할 경우 실행오류가 발생할 수 있다. 따라서 인스턴스의 원래 자료형을 확인하는 연산자 instanceof
를 사용한다.
instanceof
Parent toby = new Child()
if (toby instanceof Child) {
Child toby_C = (Child) toby;
}
🏃달리기나 해야지🏃