- 업캐스팅된 클래스를 다시 원래의 타입으로 형 변환하는 것
- 하위 클래스로의 형 변환은 명시적으로 해야한다.
Customer vc = new VIPCustomer(); //묵시적 VIPCustomer vCustomer = (VIPCustomer)vc; //명시적
true 아니면 false를 반환 합니다.testDownCasting.java
package ch08; import java.util.ArrayList; class Animal { public void move() { System.out.println("동물이 움직 입니다."); } } class Human extends Animal { @Override public void move() { System.out.println("사람이 두 발로 걷습니다."); } public void readBook() { System.out.println("사람이 책을 읽습니다."); } } class Tiger extends Animal { @Override public void move() { System.out.println("호랑이가 네 발로 뜁니다."); } public void hunting() { System.out.println("호랑이가 사냥을 합니다."); } } class Eagle extends Animal { @Override public void move() { System.out.println("독수리가 하늘을 날아 다닙니다."); } public void flying() { System.out.println("독수리가 양 날개를 쭉 펴고 날아 다닙니다."); } } public class AnimalTest { public static void main(String[] args) { AnimalTest test = new AnimalTest(); // UpCasting Animal hAnimal = new Human(); Animal tAnimal = new Tiger(); Animal eAnimal = new Eagle(); ArrayList<Animal> animalList = new ArrayList<>(); animalList.add(hAnimal); animalList.add(tAnimal); animalList.add(eAnimal); for(Animal animal : animalList) { animal.move(); } System.out.println(); test.testDownCasting(animalList); } public void testDownCasting(ArrayList<Animal> list) { for(int i=0; i <list.size(); i++) { Animal animal = list.get(i); if(animal instanceof Human) { Human human = (Human)animal; // DownCasting human.readBook(); } else if(animal instanceof Tiger) { Tiger tiger = (Tiger)animal; // DownCasting tiger.hunting(); } else if(animal instanceof Eagle) { Eagle eagle = (Eagle)animal; // DownCasting eagle.flying(); } else { System.out.println("unsupported type"); } } } public void moveAnimal (Animal animal) { animal.move(); } }출력 결과