이건 자동으로 이루어져요. 자식 클래스는 부모 클래스의 모든 것을 물려받았기 때문에 문제가 없음. 하지만 이렇게 바꾸고 나면 myPet 변수로는 Dog 클래스에만 있는 특별한 기능(메소드)은 사용할 수 없게 됨. Animal 클래스에 정의된 기능만 쓸 수 있음.
2. 다운캐스팅 (Downcasting)
업캐스팅된 객체를 원래의 자식 클래스 타입으로 되돌리는 것.
Animal myPet = new Dog();
// myPet을 다시 Dog 타입으로 되돌림
Dog myDog = (Dog) myPet;
다운캐스팅은 수동으로 (클래스이름)을 붙여서 바꿔줘야 해요. 왜냐하면 부모 클래스 타입의 변수가 실제로는 다른 자식 클래스 객체를 가리키고 있을 수도 있어서, 함부로 바꾸면 오류가 발생할 수 있거든요.
예를 들어, Animal 타입의 myPet이 사실은 Cat 객체였는데 Dog로 바꾸려 하면 ClassCastException이라는 오류가 터질 수 있음. 그래서 다운캐스팅을 할 때는 instanceof 키워드를 사용해서 원래 객체가 무엇인지 먼저 확인하고 바꾸는 것이 안전
if (myPet instanceof Dog) {
Dog myDog = (Dog) myPet;
}