프로그래밍 언어/JAVA(자바) 응용

29.다운 캐스팅과 instance of

lroot 2022. 5. 24. 21:31
728x90
반응형

다운 캐스팅(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();
}

}