ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UpCasting & DownCasting
    Programming/JAVA 2009. 3. 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은 꼭!!!! 같아야 한다. 안그러면 오류 발생!!!!

    댓글 3

    • 지나가던 자바교육생 2016.04.21 09:47

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

      • 지나가던 자바교육생 2016.04.21 09:52

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

      • 은행 계좌 예제를 봤었는데요.
        각 계좌마다 서로 다른 이율을 계산하지만 이율을 계산한다는 건 같죠.

        class 계좌
        float 이율계산()

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

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

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

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

Designed by Tistory.