Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

singleton classes ??

Hi ,

I came across the statement in the code which i am reviewing .

its :

CALL METHOD me->get_id

EXPORTING

internal = internal.

can any one explain me here the use of ' <b>me->get_id'</b>. ?

can i replace above statement by the following given code :

data : cl_lcl type ref to cl_click .

create object cl_lcl.

CALL METHOD cl_lcl->get_id

EXPORTING

internal = internal.

if not , why ??

Thanks ,

Abhishek .

Former Member
replied

Hi Abhishek,

This statement is Often used to differentiate from a subclass attributes / methods to superclass attributes / methods or just differentiate from a global data of the class to a local data to a class.

<b>SAP Documentation Reference</b>

During object creation, me also points to the instance of the generated subclass during the execution of an instance constructor of a superclass that has been called using super->constructor. In the instance constructor of the superclass, or in methods that have been called by the instance constructor, specifying me-> with the method call has no effect. Instead, the method implementations of the superclass are always called.

I think you'll understand if look at the follow example.

REPORT  zself_reference.

*----------------------------------------------------------------------*
*       CLASS test DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS one DEFINITION.

  PUBLIC SECTION.

    METHODS get_id EXPORTING global_internal TYPE char01
                             local_internal  TYPE char01.

    METHODS test.

    DATA v_internal TYPE char01.

ENDCLASS.                    "one DEFINITION


*----------------------------------------------------------------------*
*       CLASS one IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS one IMPLEMENTATION.

  METHOD get_id.

    DATA v_internal TYPE char01.

*   Using ME you can diferentiate from Global, Local and Parameter

*   If you need to access Global v_internal definited on Public Section
*   you must use ME as identifier to actual instance os class test,
*   it's becouse there two DATA with the same name 'v_internal",
*   Otherwise you don't need to use ME !

*   Accessing Global DATA v_internal
    me->v_internal = 'A'.
    MOVE me->v_internal TO global_internal.

*   If you need to access Local v_internal definited in the method
*   you can't use ME !

*   Accessing Global DATA v_internal
    v_internal = 'B'.
    MOVE v_internal TO local_internal.

  ENDMETHOD.                    "get_id

  METHOD test.

    DATA v_global_internal TYPE char01.
    DATA v_local_internal  TYPE char01.

*   This statement call the method of own class ONE
    CALL METHOD get_id
      IMPORTING
        global_internal = v_global_internal
        local_internal  = v_local_internal.

    WRITE: / 'global_internal of Class One => ', v_global_internal.
    WRITE: / 'local_internal of Class One => ',  v_local_internal.

  ENDMETHOD.                    "test

ENDCLASS.                    "one IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS two DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS two DEFINITION INHERITING FROM one.

  PUBLIC SECTION.

    METHODS get_id REDEFINITION.
    METHODS test REDEFINITION.

ENDCLASS.                    "two DEFINITION

*----------------------------------------------------------------------*
*       CLASS two IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS two IMPLEMENTATION.

  METHOD get_id.

    DATA v_global_internal TYPE char01.
    DATA v_local_internal  TYPE char01.

*   Using the super-reference 'SUPER' you can diferentiate from Global, Local
*   and Parameter from Super class and Sub class Class

*   This statement call the method of super class ONE
    CALL METHOD super->get_id
      IMPORTING
        global_internal = v_global_internal
        local_internal  = v_local_internal.

    WRITE: / 'global_internal of Super Class One in Class Two => ', v_global_internal.
    WRITE: / 'local_internal of Super Class One in Class Two => ',  v_local_internal.

    DATA v_internal TYPE char01.

*   Using the self-reference 'ME' you can diferentiate from Global, Local and Parameter

*   If you need to access Global v_internal definited on Public Section
*   you must use ME as identifier to actual instance os class test,
*   it's becouse there two DATA with the same name 'v_internal",
*   Otherwise you don't need to use ME !

*   Accessing Global DATA v_internal
    me->v_internal = 'C'.
    MOVE me->v_internal TO global_internal.

*   If you need to access Local v_internal definited in the method
*   you can't use ME !

*   Accessing Global DATA v_internal
    v_internal = 'D'.
    MOVE v_internal TO local_internal.

  ENDMETHOD.                    "get_id

  METHOD test.

    DATA v_global_internal TYPE char01.
    DATA v_local_internal  TYPE char01.

*   This statement call the method of own class ONE
    CALL METHOD get_id
      IMPORTING
        global_internal = v_global_internal
        local_internal  = v_local_internal.

    WRITE: / 'global_internal of Class Two Without ME => ', v_global_internal.
    WRITE: / 'local_internal of Class Two Without ME => ',  v_local_internal.

*   The same Behavior we have with the self-reference
    CALL METHOD me->get_id
      IMPORTING
        global_internal = v_global_internal
        local_internal  = v_local_internal.

    WRITE: / 'global_internal of Class Two With ME => ', v_global_internal.
    WRITE: / 'local_internal of Class Two With ME => ',  v_local_internal.

  ENDMETHOD.                    "test

ENDCLASS.                    "two IMPLEMENTATION

DATA o_two TYPE REF TO two.

DATA v_global_internal TYPE char01.
DATA v_local_internal  TYPE char01.

START-OF-SELECTION.

  CREATE OBJECT o_two.

  CALL METHOD o_two->test( ).

Regards.

Marcelo Ramos

0 View this answer in context
Not what you were looking for? View more on this topic or Ask a question