Programming/JAVA2009.03.30 11:38

 조금 헷갈리던 UpCasting 과 DownCasting 이 이제야 이해가 되고 있네요;


위와 같이 Class가 있다고 하면..

Animal ani_1 = new Dog();
Animal ani_2 = new Cat();
Animal ani_3 = new Bird();


ani_1.move();
ani_1.run(); 
  // 오류 발생

ani_2.sleep();  // Cat 의 sleep() 실행
ani_2.run();  // 오류 발생

ani_3.move();  // Bird의 move() 실행
ani_3.sleep();
ani_3.fly(); 
  // 오류 발생

UpCasting을 하게되면 Animal class의 Memory 크기에 Dog, Cat, Bird의 Memory를 넣게 된다

그래서 UpCasting된 ani_1, ani_2, ani_3 는 Animal의 메모리 만큼을 가지고 Animal의 Method만을 호출할 수 있다.

만약 하위 Class 인 Dog, Cat, Bird 에서 상위 Class Animal 의 Method를 Overriding 해주었을 경우 하위 Class의 Method가 실행된다.

DownCasting 은 UpCasting 된것을 원래의 type으로 돌리는 것이다.

Dog dog = (Dog)ani_1;

이와 같이 ani_1의 Animal Object 를 (Dog) 로 DownCasting 해주므로써 dog에 원래대로 들어가게 된다.

UpCasting하기전 DataType과 DownCasting 할려는 DataType은 꼭!!!! 같아야 한다. 안그러면 오류 발생!!!!
Posted by 초프 초프(초보 프로그래머)

댓글을 달아 주세요

  1. 지나가던 자바교육생

    많은 이해가 되었습니다.. 공부 목적으로 포스팅좀 해가겠습니다. ~ㅅ~

    2016.04.21 09:47 [ ADDR : EDIT/ DEL : REPLY ]
    • 지나가던 자바교육생

      문법은 이해했으나 사용목적이 생각이 안나네요. 저렇게 써야하나 싶기도 합니다. 어따 응용을 해야할지 흠...

      2016.04.21 09:52 [ ADDR : EDIT/ DEL ]
    • 은행 계좌 예제를 봤었는데요.
      각 계좌마다 서로 다른 이율을 계산하지만 이율을 계산한다는 건 같죠.

      class 계좌
      float 이율계산()

      class 일반계좌 : 계좌
      float 이율계산()

      class 적금계좌: 계좌
      float 이율계산()

      이렇게 될수도 있죠.
      내 계좌 목록은 계좌[] 가 될거고 그 안에는 일반계좌, 적금계좌 등이 들어 가죠.
      이율 계산할때는 각각 따로 하는게 아니고 계좌라고 생각하고 배열에 있는 모든 계좌에 대해 이율계산을 실행하면 되죠.

      그냥.. 이런 경우도 있다고요 ㅋ

      2016.04.21 18:36 신고 [ ADDR : EDIT/ DEL ]