We can access the public, protected and private members of parent class in sub classes/child class. But public class can access the protected and public members of child class as well. How to achieve this?
*&---------------------------------------------------------------------*
*& Report ZSR_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsr_test.
*----------------------------------------------------------------------*
* CLASS parent DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS child DEFINITION DEFERRED.
*----------------------------------------------------------------------*
* CLASS parent DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS parent DEFINITION FRIENDS child.
PUBLIC SECTION.
DATA: v_pub TYPE char40 VALUE 'Public variable in Parent class'.
METHODS: m_parent.
PROTECTED SECTION.
DATA: v_pro TYPE char40 VALUE 'Protected variable in Parent class'.
PRIVATE SECTION.
DATA: v_pri TYPE char40 VALUE 'Private variable in Parent class'.
ENDCLASS. "parent DEFINITION
*----------------------------------------------------------------------*
* CLASS parent IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS parent IMPLEMENTATION.
METHOD m_parent.
WRITE: / 'Method - M_PARENT :-',
/ 'Parent Class Attributes are as follows: ',
/ '=======================================',
/ v_pub,
/ v_pro,
/ v_pri.
SKIP 2.
* CALL METHOD m_child.
ENDMETHOD. "m_parent
ENDCLASS. "parent IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS child DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS child DEFINITION INHERITING FROM parent.
PUBLIC SECTION.
METHODS m_child.
DATA: c_pub TYPE char40 VALUE 'Hello'.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS. "child DEFINITION
*----------------------------------------------------------------------*
* CLASS child IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS child IMPLEMENTATION.
METHOD m_child.
DATA oref TYPE REF TO parent.
CREATE OBJECT oref.
WRITE oref->v_pri.
WRITE: / 'Method - M_CHILD :-',
/ 'Child class can access all Public attributes from Parent',
/ '========================================================',
/ v_pub,
/ v_pro.
"/ v_pri. Private data can't be accessed from Child
SKIP.
v_pub = 'Public has been changed in Child class'.
v_pro = 'Protected has been changed in Child class'.
WRITE: / 'Changed Public & Protected attributes:',
/ '======================================',
/ v_pub,
/ v_pro.
* / v_pri.
ENDMETHOD. "m_child
ENDCLASS. "child IMPLEMENTATION
START-OF-SELECTION.
DATA: o_parent TYPE REF TO parent,
o_child TYPE REF TO child.
CREATE OBJECT: o_parent, o_child.
CALL METHOD: o_parent->m_parent,
o_child->m_child.
o_parent->v_pub = 'Public data is changed again by Sandip.'.
SKIP 2.
WRITE: / 'Public data can be changed outside the Class:',
/ '=============================================',
/ o_parent->v_pub.
Regards,
Gopa