현재 abap object관련해서 공부하고 있는데요...easy-abap교재 p921에 있는 프로그램 z017_007. 에 있는소스에서
아래 부분 객체생성전에 data 선언부 부분이 좀 이상해요...객체인 air777은 plane클래스를 참조해야 되지 않나요?
같은 객체타입이라면 casting을 쓸이유가 없는것 아닌가요?
여하튼 아래소스에서 air777를 참조클래스를 vehicle--> plane으로 수정후에 cast기호( ?= )를 써서 실행했는데..
오류가 발생하네여.. 이론에 따르면 casting은 하나의 객체를 참조해서 자신과 다른 타입의 또다른 객체를 생성한다고 알고있는데... 아래소스코드의 잘못된 부분에 대해서 설명해주셨으면..합니다.
* Class Declarations
class vehicle definition.
public section.
methods: create.
protected section.
data speed type i value '90'.
endclass. "vehicle DEFINITION
*----------------------------------------------------------------------*
* CLASS plane DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class plane definition inheriting from vehicle.
public section.
methods: fly.
protected section.
data altitude type i.
endclass. "plane DEFINITION
* Class Implementations
class vehicle implementation.
method create.
speed = speed + 10.
write: / 'air777 is from pony????'.
endmethod. "create
endclass. "vehicle IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS plane IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class plane implementation.
method fly.
speed = speed + 1000.
write : 'speed = speed + 1000'.
endmethod. "fly
endclass. "plane IMPLEMENTATION
* Global Data
data: pony type ref to vehicle,
air777 type ref to plane.
* Classical Processing Blocks
start-of-selection.
create object: pony.
try.
air777 ?= pony.
catch : cx_sy_move_cast_error.
endtry.
*try.
air777->create( ). //오류 나는 부분.
댓글 4
-
e-abap
2008.06.16 17:37
-
kkk
2008.06.16 18:10
e-abap님 실행시 오류가 뜨는데요ㅜㅜ... 패치를 안해서 그런지 모르겠네요..
아래 오류사항내역입니당..
Runtime Errors OBJECTS_OBJREF_NOT_ASSIGNED
Except. CX_SY_REF_IS_INITIAL
Date and Time 2008.06.16 09:08:26 -
해처리
2008.06.16 20:02
widening cast 예제 같은데요..
"air777를 참조클래스를 vehicle--> plane으로 수정후에 " 이말에 동의 하고요.
헌데 실행해보니 "air777 ?= pony. " 에서 casting이 안되고 exception이 발생하네요.
air777의 instance가 생성이 안되었으니 "air777->create( ). " 에서 오류가 나는건 당연한것 같고요.
casting에 대해서 잘 아시는분이 좀 갈켜주시면 좋겠네요..
-
crazybarthez
2010.05.18 22:44
음... 한참 후배인 제가.... 이거 보고 실행해보다가 .... CREATE OBJECT : PONY. 이 부분에 AIR777을 추가해주니 됐습니다
이 소스를 제가 그대로 복사해서 활성화 해보니 정상적으로 실행이 되는데요.
casting(형변환)은 데이터 타입에 따라 자동으로 이루어집니다.
여기서 ? 기호를 사용한 것은 다른 타입의 클래스로 형변환을 한다는 것을 명시적(소스 코드에서 알아보기 쉽게)으로 표현하기 위한 목적입니다.
형변환이 자동으로 이루어지지 않는 경우가 있습니다.
이러한 경우 ? 기호가 없으면 에러가 발생하기 때문에 casting 기호를 사용하게 됩니다.