Burninghering's Blog
article thumbnail

1. 1. 다운 캐스팅(downcasting)

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

 

1->에러발생->2 실행->3과 같은 에러 발생(Gold이니 VIP로는 할 수 없다)

2.  

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

instanceof : 원래 인스턴스의 형이 맞는지 확인해주는 키워드 맞으면 true 아니면 false를 반환 함

 

아무런 결과도 나오지 않는다

 

오우~ YES

 

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를 사용하자

profile

Burninghering's Blog

@개발자 김혜린

안녕하세요! 반갑습니다.