다운 캐스팅(downcasting)
- 업 캐스팅된 클래스를 다시 원래의 타입으로 형 변환
- 하위 클래스로의 형 변환은 명시적으로 해야함
Customer vc = new VIPCustomer; // 묵시적
VIPCustomer vCustomer = (VIPCustomer)vc; // 명시적
예제
- AnimalTest.java
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 hunt() { 
System.out.println("호랑이가 사냥한다"); 
} 
} 
class Eagle extends Animal{ 
@Override 
public void move() { 
System.out.println("독수리가 이동"); 
} 
public void fly() { 
System.out.println("독수리가 날아다닌다"); 
} 
} 
public class AnimalTest { 
public static void main(String[] args) { 
Animal human = new Human(); 
Animal tiger = new Tiger(); 
Animal eagle = new Eagle(); 
AnimalTest animaltest = new AnimalTest(); 
//animaltest.moveAnimal(human); 
//animaltest.moveAnimal(tiger); 
//animaltest.moveAnimal(eagle); 
ArrayList<Animal> animalList = new ArrayList<>(); 
animalList.add(human); 
animalList.add(tiger); 
animalList.add(eagle); 
/*for(Animal animal : animalList) { 
animal.move(); 
}*/ 
animaltest.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; 
human.readBook(); 
} 
else if(animal instanceof Tiger) { 
Tiger tiger = (Tiger) animal; 
tiger.hunt(); 
} 
else if(animal instanceof Eagle) { 
Eagle eagle = (Eagle) animal; 
eagle.fly(); 
} 
else { 
System.out.println("없음"); 
} 
} 
} 
public void moveAnimal(Animal animal) { 
animal.move(); 
} 
}
'프로그래밍 언어 > JAVA(자바) 응용' 카테고리의 다른 글
| 31.추상 클래스 - 템플릿 메서드 패턴 (0) | 2022.05.24 | 
|---|---|
| 30.추상 클래스 (0) | 2022.05.24 | 
| 28.상속은 언제 사용 (0) | 2022.05.24 | 
| 27.다형성 (0) | 2022.05.24 | 
| 26.메서드 재정의와 가상메서드 원리 (0) | 2022.05.24 | 
댓글