다운 캐스팅(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 |
댓글