SAP ABAP OO面向对象入门实例
SAP ABAP OO面向对象入门实例
SAP ABAP OO面向对象入门实例
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 简单ABAP对象 *
*&---------------------------------------------------------------------*
REPORT y_test_a .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
METHODS: show_text.
PRIVATE SECTION.
ENDCLASS. "simpleobj
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD show_text.
WRITE text.
ENDMETHOD. "show_text
ENDCLASS. "SIMPLEOBJ
START-OF-SELECTION.
*&---------------------------------------------------------------------*
*& *
*&---------------------------------------------------------------------*
*& *
*& 类的静态属性 *
*&---------------------------------------------------------------------*
REPORT y_test_a_1 .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
METHODS:accelerate,show_speed.
PROTECTED SECTION.
ENDCLASS. "vehicle
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD accelerate.
speed = speed + 1.
ENDMETHOD. "accelerate
METHOD show_speed.
ENDMETHOD. "show_speed
ENDCLASS. "vehicle
START-OF-SELECTION.
WRITE: 'ob_app1',ob_app1->class_name.
WRITE: / 'ob_app2',ob_app2->class_name.
WRITE: / 'vehicle',vehicle=>class_name.
SKIP.
ob_app1->class_name = 'Ship'.
WRITE: / 'ob_app1',ob_app1->class_name.
WRITE: / 'ob_app2',ob_app2->class_name.
WRITE: / 'vehicle',vehicle=>class_name.
SKIP.
vehicle=>class_name = 'Bus'.
DO 5 TIMES.
ENDDO.
o_vehicle2 = o_vehicle.
CLEAR o_vehicle.
WRITE '对象只要有被引用的变量,就是活动的。'.
*&---------------------------------------------------------------------*
*& *
*&---------------------------------------------------------------------*
*& *
*& 类方法参数调用 *
*&---------------------------------------------------------------------*
REPORT y_test_a_2 .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
PRIVATE SECTION.
ENDCLASS. "vehicle
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD accelerate.
ENDMETHOD. "accelerate
METHOD exp_speed.
ispeed = speed.
WRITE cname.
ENDMETHOD. "show_speed
METHOD add.
addone = addone + 1.
ENDMETHOD. "add
ENDCLASS. "vehicle
START-OF-SELECTION.
EXPORTING
rate = int.
EXPORTING
rate = int.
EXPORTING
cname = fname
IMPORTING
ispeed = int.
WRITE:int.
CHANGING
addone = int.
WRITE: / int.
*&---------------------------------------------------------------------*
*& *
*&---------------------------------------------------------------------*
*& *
*& 类函数方法 *
*&---------------------------------------------------------------------*
REPORT y_test_a_3 .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
PRIVATE SECTION.
ENDCLASS. "circle
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD get_area.
ENDMETHOD. "get_area
ENDCLASS. "circle
area TYPE f.
START-OF-SELECTION.
EXPORTING
i_radius = radius
RECEIVING
r_size = area.
WRITE: / area.
WRITE: / area.
*&---------------------------------------------------------------------*
*& *
*&---------------------------------------------------------------------*
*& *
*& 类的构造方法 *
*&---------------------------------------------------------------------*
REPORT y_test_a_4 .
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
PUBLIC SECTION.
show_speed.
PRIVATE SECTION.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD accelerate.
ENDMETHOD. "accelertate
METHOD show_speed.
WRITE / speed.
ENDMETHOD. "show_speed
METHOD constructor.
speed = i_speed.
ENDMETHOD. "constructor
ENDCLASS. "vehicle
START-OF-SELECTION.
EXPORTING
rate = 2.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& *
*& 类的继承 多态 *
*&---------------------------------------------------------------------*
REPORT y_test_a_5 .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
METHODS write_first.
METHODS write_second.
ENDCLASS. "superclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
METHODS write_third.
ENDCLASS. "subclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
METHODS:write_me,write_first REDEFINITION.
ENDCLASS. "redefclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD write_first.
ENDMETHOD. "write_first
METHOD write_second.
ENDMETHOD. "write_second
ENDCLASS. "superclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD write_third.
ENDMETHOD. "write_third
ENDCLASS. "subclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD write_me.
ENDMETHOD. "write_super
METHOD write_first.
ENDMETHOD. "write_first
ENDCLASS. "REDEFCLASS
START-OF-SELECTION.
CALL METHOD:inher_obj->write_first,
inher_obj->write_second,
inher_obj->write_third.
SKIP.
CALL METHOD:redef_obj->write_first.
CALL METHOD:redef_obj->write_me.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& *
*&---------------------------------------------------------------------*
REPORT y_test_a_6 .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
ENDCLASS. "superclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
ENDCLASS. "subclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
METHODS:write_finalclass.
ENDCLASS. "finalclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD write_first.
WRITE:para.
ENDMETHOD. "write_first
METHOD write_finalmethod .
ENDMETHOD. "write_sub
ENDCLASS. "subclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD write_finalclass.
ENDMETHOD. "write_finalclass
ENDCLASS. "finalclass
START-OF-SELECTION.
*&---------------------------------------------------------------------*
*& *
*&---------------------------------------------------------------------*
*& *
*& 类的接口 *
*&---------------------------------------------------------------------*
REPORT y_test_a_7 .
*---------------------------------------------------------------------*
* INTERFACE output
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
INTERFACE output.
METHODS write.
ENDINTERFACE. "output
*---------------------------------------------------------------------*
* INTERFACE status
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
INTERFACE status.
METHODS write.
ENDINTERFACE. "status
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
INTERFACES :output,status,zintest.
METHODS increment.
PRIVATE SECTION.
ENDCLASS. "superclass
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD output~write.
ENDMETHOD. "output~write
METHOD status~write.
ENDMETHOD. "status~write
METHOD zintest~test.
ENDMETHOD. "zintest~test
METHOD increment.
ADD 1 TO count.
ENDMETHOD. "increment
ENDCLASS. "superclass
START-OF-SELECTION.
*实例调用接口方法,类引用
CREATE OBJECT : super_obj,super_object.
SKIP.
* 直接调用接口方法,需要通过内表实现,接口引用
ENDLOOP.
ENDLOOP.
SKIP.
ENDLOOP.
SKIP.
*接口引用赋值类引用
interface_obj = super_object.
badi_obj = super_object.
SKIP.
*类实例访问变量
super_obj->status~int = 5.
WRITE / super_obj->status~int.
*类实例访问静态变量
super_obj->status~cint = 10.
WRITE / super_obj->status~cint.
*类名访问静态变量
superclass=>status~cint = 20.
WRITE / superclass=>status~cint .
*接口实例访问变量
interface_obj->int = 5.
WRITE / interface_obj->int.
*接口实例访问静态变量
->cint = 10.
WRITE / interface_obj->cint.
*接口名访问常量
WRITE / status=>const.
*&---------------------------------------------------------------------*
*& *
*&---------------------------------------------------------------------*
*& *
*& 类的事件 *
*&---------------------------------------------------------------------*
REPORT y_test_a_8 .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
* EVENTS: too_fast.
METHODS:accelerate,show_speed.
ENDCLASS. "vehicle
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD accelerate.
speed = speed + 1.
IF speed > 5 .
ENDIF.
ENDMETHOD. "accelerate
METHOD show_speed.
WRITE: / 'Speed:',speed.
ENDMETHOD. "show_speed
ENDCLASS. "vehicle
*&---------------------------------------------------------------------*
*& Class handler
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
PUBLIC SECTION.
ENDCLASS. "handler
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
METHOD handle_excess.
LEFT-JUSTIFIED.
vehicle=>speed = 1.
ENDMETHOD. "handle_excess
ENDCLASS. "handler
START-OF-SELECTION.
DO 11 TIMES.
ENDDO.