class 1 源码如下图
CLASS zcl_test_01 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
PROTECTED SECTION.
PRIVATE SECTION.
DATA mv_test_01 TYPE string VALUE 'Test' ##NO_TEXT.
METHODS ztest_01
RETURNING
VALUE(ev_msg) TYPE string .
ENDCLASS.
CLASS ZCL_TEST_01 IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_TEST_01->ZTEST_01
* +-------------------------------------------------------------------------------------------------+
* | [<-()] EV_MSG TYPE STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD ztest_01.
ev_msg = 'ZCL_TEST_01'.
ENDMETHOD.
ENDCLASS.
上面 例子的 class 有私有 属性 MV_TEST_01 私有 方法 TEST_01
假设有class 2 需要访问 class 1的方法和属性
新建 calss2 ZCL_TEST_02 , 把 class 2 ZCL_TEST_02 设置为 class 1 的 friends
如图
Class 2 的源码如下图
CLASS zcl_test_02 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS test_01
EXPORTING
!ev_msg1 TYPE string
!ev_msg2 TYPE string .
PROTECTED SECTION.
DATA gr_cl_test TYPE REF TO zcl_test_01 .
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_TEST_02 IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TEST_02->TEST_01
* +-------------------------------------------------------------------------------------------------+
* | [<---] EV_MSG1 TYPE STRING
* | [<---] EV_MSG2 TYPE STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD test_01.
IF gr_cl_test IS NOT BOUND.
CREATE OBJECT gr_cl_test.
ENDIF.
ev_msg1 = gr_cl_test->mv_test_01.
ev_msg2 = gr_cl_test->ztest_01( ).
ENDMETHOD.
ENDCLASS.