定义 例子1
*---------------------------------------------------------------------*
* CLASS vehicle DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS vehicle DEFINITION.
PUBLIC SECTION.
CLASS-DATA class_name(10) TYPE c VALUE 'Vehicle'.
METHODS:accelerate,
show_speed.
PROTECTED SECTION.
DATA speed TYPE i.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS vehicle IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS vehicle IMPLEMENTATION.
METHOD accelerate.
speed = speed + 1.
ENDMETHOD.
METHOD show_speed.
WRITE:/ 'speed:',speed.
ENDMETHOD.
ENDCLASS.
DATA: g_vehicle TYPE REF TO vehicle.
START-OF-SELECTION.
write vehicle=>class_name.
CREATE OBJECT g_vehicle.
DO 5 TIMES.
CALL METHOD g_vehicle->accelerate.
CALL METHOD g_vehicle->show_speed.
ENDDO.
* CLASS vehicle DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS vehicle DEFINITION.
PUBLIC SECTION.
METHODS: accelerate IMPORTING rate TYPE i,
constructor importing i_speed type i, "构造方法
show_speed.
* PRIVATE SECTION.
class-DATA speed TYPE i VALUE 0.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS vehicle IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS vehicle IMPLEMENTATION.
METHOD accelerate.
speed = speed + rate.
ENDMETHOD.
METHOD show_speed.
WRITE:/ 'speed:',speed.
ENDMETHOD.
method constructor.
speed = i_speed.
endmethod.
ENDCLASS.
vehicle=>speed = 5.
CREATE OBJECT o_vehicle exporting i_speed = 1.
CALL METHOD o_vehicle->accelerate EXPORTING rate = 2.
CALL METHOD o_vehicle->accelerate EXPORTING rate = 2.
CALL METHOD o_vehicle->show_speed.
REPORT zcp_saptest4.
*---------------------------------------------------------------------*
* CLASS vehicle DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS vehicle DEFINITION INHERITING FROM object.
PUBLIC SECTION.
METHODS: accelerate,write_status.
PROTECTED SECTION.
DATA speed TYPE i.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS plane DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS plane DEFINITION INHERITING FROM vehicle.
PUBLIC SECTION.
METHODS: rise, write_status REDEFINITION.
PROTECTED SECTION.
DATA altitude TYPE i.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS ship DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS ship DEFINITION INHERITING FROM vehicle.
PUBLIC SECTION.
METHODS write_status REDEFINITION.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS vehicle IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS vehicle IMPLEMENTATION.
METHOD accelerate.
speed = speed + 1.
ENDMETHOD.
METHOD write_status.
WRITE:/ 'Speed:',speed.
ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS plane IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS plane IMPLEMENTATION.
METHOD rise.
altitude = altitude + 1.
ENDMETHOD.
METHOD write_status.
WRITE / 'Plane:'.
CALL METHOD super->write_status.
WRITE:/ 'Altitude:',altitude.
ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS ship IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS ship IMPLEMENTATION.
METHOD write_status.
WRITE:/ 'Ship speed:',speed.
ENDMETHOD.
ENDCLASS.
data: plane_ref type ref to plane,
ship_ref type ref to ship.
start-of-selection.
create object: plane_ref,ship_ref.
call method: plane_ref->accelerate,
plane_ref->rise,
plane_ref->write_status,
ship_ref->accelerate,
ship_ref->write_status.
* CLASS vehicle DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS vehicle DEFINITION INHERITING FROM object.
PUBLIC SECTION.
EVENTS: too_fast.
METHODS: accelerate,write_status.
PROTECTED SECTION.
DATA speed TYPE i.
ENDCLASS.
* CLASS vehicle IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS vehicle IMPLEMENTATION.
METHOD accelerate.
speed = speed + 1.
IF speed > 5.
RAISE EVENT too_fast.
* speed = speed - 1.
ENDIF.
ENDMETHOD.
METHOD write_status.
WRITE:/ 'Speed:',speed.
ENDMETHOD.
ENDCLASS.
* CLASS handler DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS handler DEFINITION.
PUBLIC SECTION.
METHODS handle_excess FOR EVENT too_fast OF vehicle.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS handler IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS handler IMPLEMENTATION.
METHOD handle_excess.
WRITE:/ 'Speed can not be too fast'.
* speed = 10.
ENDMETHOD.
ENDCLASS.
o_handle TYPE REF TO handler.
CREATE OBJECT: o_vehicle,o_handle.
SET HANDLER o_handle->handle_excess FOR ALL INSTANCES.
DO 11 TIMES.
CALL METHOD o_vehicle->accelerate.
CALL METHOD o_vehicle->write_status.
ENDDO.