REPORT ztest_class_02_lhy.
* 1. 类定义
CLASS car DEFINITION.
PUBLIC SECTION.
DATA: speed TYPE i. " 属性:当前速度
METHODS: accelerate IMPORTING i TYPE i " 输入参数:加速值
EXPORTING out_speed TYPE i. " 输出参数:加速后的速度
ENDCLASS.
* 2. 类实现
CLASS car IMPLEMENTATION.
METHOD accelerate.
speed = speed + i. " 修改内部状态
out_speed = speed. " 给输出参数赋值
ENDMETHOD.
ENDCLASS.
* 3. 使用类
START-OF-SELECTION.
DATA: obj TYPE REF TO car, " 对象引用
lv_input TYPE i VALUE 100,
lv_output TYPE i.
CREATE OBJECT obj. " 创建对象实例
" 调用方法,注意调用时关键字与定义时相反!
CALL METHOD obj->accelerate
EXPORTING i = lv_input
IMPORTING out_speed = lv_output.
" 输出结果
WRITE: / '加速后的速度:', lv_output.
*--------------------------------------------------------------
*1. 类定义,包含带参数的构造函数
CLASS lcl_connection DEFINITION.
PUBLIC SECTION.
METHODS constructor IMPORTING i_carrier_id TYPE string
i_connection_id TYPE string.
METHODS get_output RETURNING VALUE(r_output) TYPE string.
PRIVATE SECTION.
DATA: carrier_id TYPE string,
connection_id TYPE string.
ENDCLASS.
* 2. 类实现
CLASS lcl_connection IMPLEMENTATION.
METHOD constructor.
" 将传入的参数赋值给对象的私有属性
me->carrier_id = i_carrier_id.
me->connection_id = i_connection_id.
ENDMETHOD.
METHOD get_output.
r_output = |Carrier: { carrier_id }, Connection: { connection_id }|.
ENDMETHOD.
ENDCLASS.
* 3. 使用类
START-OF-SELECTION.
DATA: lo_connection TYPE REF TO lcl_connection.
" 创建对象时,使用NEW #( ) 并传入参数[reference:12]
lo_connection = NEW #( i_carrier_id = 'LH'
i_connection_id = '0400' ).
" 调用方法获取并输出格式化的字符串
WRITE: / lo_connection->get_output( ).
*--------------------------------------------------------------
CLASS lcl_changing_demo DEFINITION.
PUBLIC SECTION.
METHODS modify_text CHANGING cv_text TYPE string.
ENDCLASS.
CLASS lcl_changing_demo IMPLEMENTATION.
METHOD modify_text.
CONCATENATE cv_text ' - 已被修改' INTO cv_text.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA: lo_demo TYPE REF TO lcl_changing_demo,
lv_my_text TYPE string VALUE '原始文本'.
CREATE OBJECT lo_demo.
" 调用方法,直接传入变量,方法内部会修改它
CALL METHOD lo_demo->modify_text CHANGING cv_text = lv_my_text.
WRITE: / lv_my_text. " 输出: 原始文本 - 已被修改