2016 May 05 5:33 AM
Hi,
Can we able use a me variable to access a private class methods in friends.
2016 May 05 5:48 AM
Hi kanya Devi Sekar,
No,We cant access a private class method in another class using me variable though satisfying friend function.need to create an instance in the sub class to access the private class methods.
CLASS SUB DEFINITION DEFERRED.
CLASS SU DEFINITION FRIENDS SUB.
PROTECTED SECTION.
METHODS PRO.
PRIVATE SECTION.
METHODS PRI.
ENDCLASS.
CLASS SU IMPLEMENTATION.
METHOD PRI.
WRITE : 'PRIVATE METHOD'.
ENDMETHOD.
METHOD PRO.
WRITE : 'PROTECTED METHOD'.
ENDMETHOD.
ENDCLASS.
CLASS SUB DEFINITION.
PUBLIC SECTION.
METHODS CALLPRIVATE.
ENDCLASS.
CLASS SUB IMPLEMENTATION.
METHOD CALLPRIVATE.
* DATA OBJ1 TYPE REF TO SU.
*CREATE OBJECT OBJ1.
CALL METHOD me->PRI."CALL METHOD obj1->PRI.
CALL METHOD me->PRO."CALL METHOD obj1->PRI.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA OBJ TYPE REF TO SUB.
CREATE OBJECT OBJ.
CALL METHOD obj->CALLPRIVATE.
see the error in image.
the following code snippet will give solution to the above probelm.
CLASS sub DEFINITION DEFERRED.
*----------------------------------------------------------------------*
* CLASS SU DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS su DEFINITION FRIENDS sub.
PROTECTED SECTION.
METHODS pro.
PRIVATE SECTION.
METHODS pri.
ENDCLASS. "SU DEFINITION
*----------------------------------------------------------------------*
* CLASS SU IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS su IMPLEMENTATION.
METHOD pri.
WRITE : 'PRIVATE METHOD'.
ENDMETHOD. "PRI
METHOD pro.
WRITE : 'PROTECTED METHOD'.
ENDMETHOD. "PRO
ENDCLASS. "SU IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS SUB DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS sub DEFINITION.
PUBLIC SECTION.
METHODS callprivate.
ENDCLASS. "SUB DEFINITION
*----------------------------------------------------------------------*
* CLASS SUB IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS sub IMPLEMENTATION.
METHOD callprivate.
DATA obj1 TYPE REF TO su.
CREATE OBJECT obj1.
CALL METHOD obj1->pri.
CALL METHOD obj1->pri.
ENDMETHOD. "CALLPRIVATE
ENDCLASS. "SUB IMPLEMENTATION
START-OF-SELECTION.
DATA obj TYPE REF TO sub.
CREATE OBJECT obj.
CALL METHOD obj->callprivate.
2016 May 05 5:48 AM
Hi kanya Devi Sekar,
No,We cant access a private class method in another class using me variable though satisfying friend function.need to create an instance in the sub class to access the private class methods.
CLASS SUB DEFINITION DEFERRED.
CLASS SU DEFINITION FRIENDS SUB.
PROTECTED SECTION.
METHODS PRO.
PRIVATE SECTION.
METHODS PRI.
ENDCLASS.
CLASS SU IMPLEMENTATION.
METHOD PRI.
WRITE : 'PRIVATE METHOD'.
ENDMETHOD.
METHOD PRO.
WRITE : 'PROTECTED METHOD'.
ENDMETHOD.
ENDCLASS.
CLASS SUB DEFINITION.
PUBLIC SECTION.
METHODS CALLPRIVATE.
ENDCLASS.
CLASS SUB IMPLEMENTATION.
METHOD CALLPRIVATE.
* DATA OBJ1 TYPE REF TO SU.
*CREATE OBJECT OBJ1.
CALL METHOD me->PRI."CALL METHOD obj1->PRI.
CALL METHOD me->PRO."CALL METHOD obj1->PRI.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA OBJ TYPE REF TO SUB.
CREATE OBJECT OBJ.
CALL METHOD obj->CALLPRIVATE.
see the error in image.
the following code snippet will give solution to the above probelm.
CLASS sub DEFINITION DEFERRED.
*----------------------------------------------------------------------*
* CLASS SU DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS su DEFINITION FRIENDS sub.
PROTECTED SECTION.
METHODS pro.
PRIVATE SECTION.
METHODS pri.
ENDCLASS. "SU DEFINITION
*----------------------------------------------------------------------*
* CLASS SU IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS su IMPLEMENTATION.
METHOD pri.
WRITE : 'PRIVATE METHOD'.
ENDMETHOD. "PRI
METHOD pro.
WRITE : 'PROTECTED METHOD'.
ENDMETHOD. "PRO
ENDCLASS. "SU IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS SUB DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS sub DEFINITION.
PUBLIC SECTION.
METHODS callprivate.
ENDCLASS. "SUB DEFINITION
*----------------------------------------------------------------------*
* CLASS SUB IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS sub IMPLEMENTATION.
METHOD callprivate.
DATA obj1 TYPE REF TO su.
CREATE OBJECT obj1.
CALL METHOD obj1->pri.
CALL METHOD obj1->pri.
ENDMETHOD. "CALLPRIVATE
ENDCLASS. "SUB IMPLEMENTATION
START-OF-SELECTION.
DATA obj TYPE REF TO sub.
CREATE OBJECT obj.
CALL METHOD obj->callprivate.
2016 May 05 5:53 AM
2016 May 05 8:15 AM
You cannot. When defining classes in Se24,
1. Define the other class in Friends tab,
2. In attributes tab, create a new global attribute, GV_OBJECT type ref to (friend class)
3. In constructor or a method where the class would be first accessed, use CREATE OBJECT GV_OBJECT
4. The you can use the variable globally.
Cheers,
VS
2016 May 05 8:29 AM
As it's a beginner question (in ABAP objects), I'm afraid that maybe the question is not correctly formulated. Could you give more info on the context, code...? Why did you ask this question?
2016 May 05 8:42 AM
Hi Devi,
Me variable is used for the self reference so we cant use..Within the class only we can use.
If you want access then create reference and access it.
Thanks & Regards
@Surendra@