(1) 책의 내용대로 실행할 경우 [그림 : 17-3-3]의 결과가 나타납니다.
하지만 이것은 casting했기 때문이 아니라 pony와 air777 모두 vehicle 클래스의 인스턴스이기 때문에
애시당초 fly method가 정의되어 있지 않기 때문입니다.
같은 클래스 타입 변수이기 때문에 casting도 필요 없습니다.
data: pony type ref to vehicle,
air777 type ref to plane.
:
:
create object air777.
:
:
pony ?= air777.
:
:
*call method: pony->fly. "error
call method: pony->create.
로 해야 의도에 맞는 소스입니다.
air777 ?= pony 는 안되는데 이유는 pony가 air777보다 상위 클래스이기 때문입니다.
상위 클래스 변수에 하위 클래스 인스턴스를 담을 수는 있지만 반대는 안됩니다.
air777 ?= pony 할 경우 casting 오류가 발생합니다. (try catch는 이를 무시합니다.)
위처럼 고치면 try catch 문을 제거해도 에러가 없습니다. (casting에 문제가 없으므로)
(2) [결과 : 17-3-3] 캡쳐의 표시 위치가 틀렸습니다. 이 예제의 맨 뒤로 이동해야 합니다. (p.924)