반응형
조금 헷갈리던 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은 꼭!!!! 같아야 한다. 안그러면 오류 발생!!!!
반응형
'Programming' 카테고리의 다른 글
숫자를 문자열로 변환 (0) | 2009.05.25 |
---|---|
루프 불변성 ( loop invariant ) (0) | 2009.04.04 |
점근적 표기 (0) | 2009.03.29 |
배열 참조와 2차원 배열의 선언 (0) | 2009.03.24 |
배열 선언, 복사 (0) | 2009.03.24 |