Definition Deferred has been used for defining ABC class. The logic and procedure are similar to the tutorial - Private Friends of a Class. Here we have defined the friend class in another way like CLASS XYZ DEFINITION FRIENDS ABC.
REPORT zprivate_friend_deferred.
CLASS abc DEFINITION DEFERRED.
*----------------------------------------------------------------------*
* CLASS XYZ DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS xyz DEFINITION FRIENDS abc.
PROTECTED SECTION.
DATA v_pro TYPE char50.
PRIVATE SECTION.
DATA v_txt TYPE char50.
METHODS m_xyz.
ENDCLASS. "XYZ DEFINITION
*----------------------------------------------------------------------*
* CLASS XYZ IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS xyz IMPLEMENTATION.
METHOD m_xyz.
v_pro = 'Protected Data of Friend Class'.
v_txt = 'Private Data of Friend Class'.
WRITE: / 'Private Method:',
/ v_pro,
/ v_txt.
SKIP.
ENDMETHOD. "m_XYZ
ENDCLASS. "XYZ IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS ABC DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS abc DEFINITION.
PUBLIC SECTION.
METHODS m_abc.
ENDCLASS. "ABC DEFINITION
*----------------------------------------------------------------------*
* CLASS ABC IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS abc IMPLEMENTATION.
METHOD m_abc.
DATA obj2 TYPE REF TO xyz.
CREATE OBJECT obj2.
CALL METHOD obj2->m_xyz.
obj2->v_pro = 'Protected Data of First Class'.
obj2->v_txt = 'Private Data of First Class'.
WRITE: / obj2->v_pro,
/ obj2->v_txt.
ENDMETHOD. "m_ABC
ENDCLASS. "ABC IMPLEMENTATION
* Start of selection
START-OF-SELECTION.
* Data Declaration
DATA obj1 TYPE REF TO abc.
* Create object
CREATE OBJECT obj1.
* Call method
CALL METHOD obj1->m_abc.
Output