Inheritance and static components - kazumov/abap GitHub Wiki

Example:

Source: Inheritance and Static Components

CLASS c1 DEFINITION. 
  PUBLIC SECTION. 
    CLASS-DATA     a1 TYPE string. 
    CLASS-METHODS: class_constructor, 
                   m1 RETURNING value(r1) LIKE a1. 
ENDCLASS. 

CLASS c1 IMPLEMENTATION. 
  METHOD class_constructor. 
    a1 = 'c1'. 
  ENDMETHOD. 
  METHOD m1. 
    r1 = a1. 
  ENDMETHOD. 
ENDCLASS. 

CLASS c2 DEFINITION INHERITING FROM c1. 
  PUBLIC SECTION. 
    CLASS-METHODS class_constructor. 
ENDCLASS. 

CLASS c2 IMPLEMENTATION. 
  METHOD class_constructor. 
    a1 = 'c2'. 
  ENDMETHOD. 
ENDCLASS. 

DATA v1 TYPE string. 

START-OF-SELECTION. 
  v1 = c2=>m1( ).

Example:

Source: Inheritance Events

REPORT demo_event_inheritance.

CLASS c1 DEFINITION.
  PUBLIC SECTION.
    CLASS-EVENTS  ce1.
    CLASS-METHODS cm1.
    EVENTS  ie1.
    METHODS im1.
ENDCLASS.

CLASS c2 DEFINITION INHERITING FROM c1.
  PUBLIC SECTION.
    CLASS-METHODS cm2.
    METHODS im2.
ENDCLASS.

CLASS c3 DEFINITION INHERITING FROM c2.
  PUBLIC SECTION.
    CLASS-METHODS cm3.
    METHODS im3.
ENDCLASS.

CLASS c4 DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS cm4 FOR EVENT ce1 OF c2.
    METHODS im4 FOR EVENT ie1 OF c2.
ENDCLASS.

CLASS event_demo DEFINITION.
  PUBLIC SECTION.
    CLASS-DATA handle_flag TYPE c LENGTH 1.
    CLASS-METHODS main.
ENDCLASS.

CLASS event_demo IMPLEMENTATION.
  METHOD main.

    DATA oref1 TYPE REF TO c1.
    DATA oref2 TYPE REF TO c2.
    DATA oref3 TYPE REF TO c3.
    DATA oref4 TYPE REF TO c4.

    DATA(out) = cl_demo_output=>new(
      )->begin_section( 'Static event' ).
    SET HANDLER c4=>cm4.
    c1=>cm1( ).
    out->write( |c1=>cm1( ): { handle_flag }| ).
    c2=>cm1( ).
    out->write( |c2=>cm1( ): { handle_flag }| ).
    c3=>cm1( ).
    out->write( |c3=>cm1( ): { handle_flag }| ).
    c2=>cm2( ).
    out->write( |c2=>cm2( ): { handle_flag }| ).
    c3=>cm2( ).
    out->write( |c3=>cm2( ): { handle_flag }| ).
    c3=>cm3( ).
    out->write( |c3=>cm3( ): { handle_flag }| ).

    out->next_section( 'Instance event' ).
    CREATE OBJECT: oref1, oref2, oref3, oref4.
    SET HANDLER oref4->im4 FOR ALL INSTANCES.
    oref1->im1( ).
    out->write( |oref1->im1( ): { handle_flag }| ).
    oref2->im1( ).
    out->write( |oref2->im1( ): { handle_flag }| ).
    oref3->im1( ).
    out->write( |oref3->im1( ): { handle_flag }| ).
    oref2->im2( ).
    out->write( |oref2->im2( ): { handle_flag }| ).
    oref3->im2( ).
    out->write( |oref3->im2( ): { handle_flag }| ).
    oref3->im3( ).
    out->write( |oref3->im3( ): { handle_flag }| ).

    out->display( ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  event_demo=>main( ).

CLASS c1 IMPLEMENTATION.
  METHOD cm1.
    CLEAR event_demo=>handle_flag.
    RAISE EVENT ce1.
  ENDMETHOD.
  METHOD im1.
    CLEAR event_demo=>handle_flag.
    RAISE EVENT ie1.
  ENDMETHOD.
ENDCLASS.

CLASS c2 IMPLEMENTATION.
  METHOD cm2.
    CLEAR event_demo=>handle_flag.
    RAISE EVENT ce1.
  ENDMETHOD.
  METHOD im2.
    CLEAR event_demo=>handle_flag.
    RAISE EVENT ie1.
  ENDMETHOD.
ENDCLASS.

CLASS c3 IMPLEMENTATION.
  METHOD cm3.
    CLEAR event_demo=>handle_flag.
    RAISE EVENT ce1.
  ENDMETHOD.
  METHOD im3.
    CLEAR event_demo=>handle_flag.
    RAISE EVENT ie1.
  ENDMETHOD.
ENDCLASS.

CLASS c4 IMPLEMENTATION.
  METHOD cm4.
    event_demo=>handle_flag = 'X'.
  ENDMETHOD.
  METHOD im4.
    event_demo=>handle_flag = 'X'.
  ENDMETHOD.
ENDCLASS.