Visibility Sections in Classes

The declaration section of a class can be split into up to three different visibility sections.

These sections define the external visibility of the class components and therefore the interfaces of the class for their users. Each component of a class must be explicitly assigned to one of the visibility sections.

Encapsulation

The three visibility sections form the basis for the important object property of encapsulation in ABAP Objects. When defining a class, you should declare the minimum possible number of components in the public section and these public components must be created carefully. For global classes, they can no longer be changed after the class is released.

Note

The class is the smallest encapsulation unit in ABAP Objects. A method can therefore use all components of all instances of the same class, except for the components of its own class. The exceptions to this rule are subclasses, which cannot access the private components of superclasses if they are not their friends.

Example

In the method m1 of the class c1, reference variables of the static type c1 can be used to access the protected attribute a11 and the private attribute a12 of any objects of c1. In the method m2 of the subclass c2, a reference variable of the static type c2 can similarly be used to access the protected attribute a11. Access to the attribute using a reference variable of the static typec1 is not permitted, as otherwise it would also be possible to access an object of the superclass or another subclass. It is not possible to access the private attribute of the superclass with either reference variable.

CLASS c1 DEFINITION.
  PUBLIC SECTION.
    METHODS m1.
  PROTECTED SECTION.
    DATA a11 TYPE i.
  PRIVATE SECTION.
    DATA a12 TYPE i.
ENDCLASS.

CLASS c1 IMPLEMENTATION.
  METHOD m1.

    DATA lref1 TYPE REF TO c1.

    lref1->a11 = 0. "OK

    lref1->a12 = 0. "OK

  ENDMETHOD.
ENDCLASS.

CLASS c2 DEFINITION INHERITING FROM c1.
  PUBLIC SECTION.
    METHODS m2.
ENDCLASS.

CLASS c2 IMPLEMENTATION.
  METHOD m2.

    DATA: lref1 TYPE REF TO c1,
          lref2 TYPE REF TO c2.

    lref1->a11 = 0. "Syntax warning, access to a11 not permitted

    lref2->a11 = 0. "OK

    lref1->a12 = 0. "Syntax error, access to a11 not permitted

    lref2->a12 = 0. "Syntax error, a12 not visible

  ENDMETHOD.
ENDCLASS.