Bu konu nesne yönelimli programlamanın “Inheritance” başlığı altında incelenebilir.

Bir sınıfın normalde mümkün olmayan protected metotlarına erişebilmek için, o sınıftan miras almamız gerekiyor.
özellikle ihtiyaç dahilinde standart sınıfların metot veya attributelerine erişmemiz gerekebilir.

Aşağıdaki örnekte protected olan bir metota nasıl erişebileceğimizi bakalım.

Z_STLOG_NET

*&---------------------------------------------------------------------*
*& Report Z_STLOG_NET
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_stlog_net.

CLASS lcl_main DEFINITION CREATE PUBLIC .

  PUBLIC SECTION .
    METHODS     : public_set_value IMPORTING VALUE(iv_anyval) TYPE string .

  PROTECTED SECTION .
    METHODS     : protected_get_value RETURNING VALUE(rv_anyval) TYPE string .

  PRIVATE SECTION .
    CLASS-DATA : private_anyvalue TYPE string .
    METHODS     : private_get_value RETURNING VALUE(rv_anyval) TYPE string .

ENDCLASS .

CLASS lcl_main IMPLEMENTATION .
  METHOD public_set_value .
    private_anyvalue = iv_anyval .
  ENDMETHOD .

  METHOD protected_get_value .
    rv_anyval = private_anyvalue .
  ENDMETHOD .

  METHOD private_get_value .
    rv_anyval = private_anyvalue .
  ENDMETHOD .
ENDCLASS .


CLASS lcl_inheriting DEFINITION INHERITING FROM lcl_main .
  PUBLIC SECTION .
    METHODS : get_value RETURNING VALUE(rv_anyval) TYPE string .
ENDCLASS .

CLASS lcl_inheriting IMPLEMENTATION .
  METHOD get_value.
*
    "buradan main classın sadece "PROTECTED" metotlarına ulaşılabilir
     rv_anyval = protected_get_value( ).

  ENDMETHOD .

ENDCLASS .

  START-OF-SELECTION .
  DATA(lo_main) = NEW lcl_main( ).
  "main classın değişkenine veri yazılıyor...
  lo_main->public_set_value( 'https://stlog.net' ) .

  "main classın veri okuma metotları protected olduğundan veri okunamıyor.
  "bunun için main class'tan miras alınıyor..
  WRITE |Atanan değer : | &&  NEW lcl_inheriting( )->get_value( ) .
0