Instance Method vs Static Method
Instance method can access both – instance components as
well as static components. Static method can only access static components. In
the following example we have instance component v_var and static component
cl_v_var. We have an instance method m_one and a static method cl_m_one. We can
access both of those components from the instance method but when we want to
access instance component from the static method then it will give a syntax
error as follows.
REPORT zsr_test NO STANDARD PAGE
HEADING.
*----------------------------------------------------------------------*
* CLASS cl_one DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_one DEFINITION.
PUBLIC SECTION.
DATA v_var TYPE char40 VALUE 'Instance Component'.
CLASS-DATA cl_v_var TYPE char40 VALUE 'Static Component'.
METHODS m_one.
CLASS-METHODS cl_m_one.
ENDCLASS. "cl_one DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_one IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_one IMPLEMENTATION.
METHOD m_one.
WRITE: / v_var,
/ cl_v_var.
ENDMETHOD. "m_one
METHOD cl_m_one.
WRITE: / cl_v_var.
ENDMETHOD. "cl_m_one
ENDCLASS. "cl_one IMPLEMENTATION
START-OF-SELECTION.
CALL METHOD cl_one=>cl_m_one.
SKIP.
DATA obj TYPE REF TO cl_one.
CREATE OBJECT obj.
CALL METHOD obj->m_one.
*----------------------------------------------------------------------*
* CLASS cl_one DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_one DEFINITION.
PUBLIC SECTION.
DATA v_var TYPE char40 VALUE 'Instance Component'.
CLASS-DATA cl_v_var TYPE char40 VALUE 'Static Component'.
METHODS m_one.
CLASS-METHODS cl_m_one.
ENDCLASS. "cl_one DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_one IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_one IMPLEMENTATION.
METHOD m_one.
WRITE: / v_var,
/ cl_v_var.
ENDMETHOD. "m_one
METHOD cl_m_one.
WRITE: / cl_v_var.
ENDMETHOD. "cl_m_one
ENDCLASS. "cl_one IMPLEMENTATION
START-OF-SELECTION.
CALL METHOD cl_one=>cl_m_one.
SKIP.
DATA obj TYPE REF TO cl_one.
CREATE OBJECT obj.
CALL METHOD obj->m_one.
The program generates the following output.