본문 바로가기
언어/JAVA

다운 캐스팅과 instanceof

by step 1 2021. 4. 18.
반응형

다운 캐스팅(downcasting)

  • 업캐스팅된 클래스를 다시 원래의 타입으로 형 변환
  • 하위 클래스로의 형 변환은 명시적으로 해야 함

Customer vc = new VIPCustomer(); // 묵시적

VIPCustomer vCustomer = (VIPCustomer)vc;  // 명시적

 

instanceof를 이용하여 인스턴스의 형 체크

원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드

맞으면 true, 아니면 false를 반환함

 

package ch29;

import java.util.ArrayList;
import java.util.Iterator;

class Animal {
	
	public void move() {
		System.out.println("동물이 움직입니다.");
	}
	
	public void eating() {
		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) {
		
		Animal hAnimal = new Human();
		Animal tAnimal = new Tiger();
		Animal eAnimal = new Eagle();
		
		AnimalTest test = new AnimalTest();
//		test.moveAnimal(hAnimal);
//		test.moveAnimal(tAnimal);
//		test.moveAnimal(eAnimal);
		
		ArrayList<Animal> animalList = new ArrayList<>();
		animalList.add(hAnimal);
		animalList.add(tAnimal);
		animalList.add(eAnimal);
		
		for (Animal animal : animalList) {
			animal.move();
		}
		
		System.out.println("==================");
		test.testDown(animalList);
	}
	
	public void moveAnimal(Animal animal) {
		animal.move();
		animal.eating();
	}
	
	public void testDown(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.hunting();;
			}
			else if (animal instanceof Eagle) {
				Eagle eagle = (Eagle) animal;
				eagle.flying();
			}
			else {
				System.out.println("아무것도 아니다");
			}
		}
	}
}

 

결과

반응형