1. 1. 다운 캐스팅(downcasting)
- 업캐스팅된 클래스를 다시 원래의 타입으로 형 변환
- 하위 클래스로의 형 변환은 명시적으로 해야 함
<java />
Customer vc = new VIPCustomer(); //묵시적(업캐스팅)
VIPCustomer vCustomer = (VIPCustomer)vc; //명시적(다운캐스팅)

2.
3. 2. instanceof를 이용하여 인스턴스의 형 체크
instanceof : 원래 인스턴스의 형이 맞는지 확인해주는 키워드 맞으면 true 아니면 false를 반환 함


animal을 ArrayList에 다 넣어놨는데,ArrayList를 매개변수로 주면서 다운캐스팅 하는 메소드 구현해보기
<java />
//메인 메소드 안에 Test 코드 구현
AnimalTest test = new AnimalTest();
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;
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("unsupported Type");
}
}
}

4. 3. 결론
다운캐스팅을 하면
위 코드와 같이 코드가 많이 지저분해지고, 각 타입으로 되돌려야 하고
할 수 있다면 다형성으로 오버라이딩 하는 것이 깔끔하지만,
반드시 원래 타입으로 되돌려야 한다면 instanceof를 사용하자
'JAVA' 카테고리의 다른 글
3-10.객체 지향 핵심 - 추상 클래스의 응용_템플릿 메서드 패턴 (3) | 2022.01.22 |
---|---|
3-9.객체 지향 핵심 - 추상 클래스(abstract class) (0) | 2022.01.22 |
3-7.객체 지향 핵심 - 상속 (0) | 2022.01.21 |
3-6.객체 지향 핵심 - 다형성 (0) | 2022.01.17 |
3-5.객체 지향 핵심 - 메서드 재정의와 가상 메서드 원리 (0) | 2022.01.16 |