Below codes is a simply and rough example could be used as a reference if you have a long time or never touch ABAP OO but would like to use it right now in you project.
REPORT YT_OO_T01.
*Interface
INTERFACE lif_test.
DATA: v_info TYPE c LENGTH 10.
METHODS: display_info.
ENDINTERFACE.
*Define Class
CLASS lcl_test DEFINITION.
PUBLIC SECTION.
EVENTS:
v_event EXPORTING VALUE(ex_info) TYPE string.
METHODS:
constructor,
set_info IMPORTING p_info TYPE c,
display_info.
CLASS-DATA:
v_static_value TYPE c LENGTH 10.
CLASS-METHODS:
display_static_info.
INTERFACES:
lif_test.
PROTECTED SECTION.
METHODS:
protected_method.
PRIVATE SECTION.
DATA: v_info TYPE c LENGTH 10.
ENDCLASS. "LCL_TEST DEFINITION
*Implementation
CLASS lcl_test IMPLEMENTATION.
METHOD constructor.
v_info = 'initial'.
ENDMETHOD. "constructor
METHOD set_info.
v_info = p_info.
ENDMETHOD. "set_info
METHOD display_info.
WRITE:/ v_info.
RAISE EVENT v_event EXPORTING ex_info = 'call event handler'.
ENDMETHOD. "display_info
METHOD display_static_info.
v_static_value = 'initial'.
WRITE:/ v_static_value.
ENDMETHOD. "display_static_info
METHOD protected_method.
WRITE:/ 'call protected method'.
ENDMETHOD. "protected_method
METHOD lif_test~display_info.
lif_test~v_info = 'Interface'.
WRITE:/ 'v_info = ', v_info,
',lif_test~v_info = ', lif_test~v_info.
ENDMETHOD.
ENDCLASS. "LCL_TEST IMPLEMENTATION
*Inheriting
CLASS lcl_test_sub DEFINITION INHERITING FROM lcl_test.
PUBLIC SECTION.
METHODS: display_sub.
*When we redefine a method, we can't change its visibility (PUBLIC, PROTECTED)
PROTECTED SECTION.
METHODS: protected_method REDEFINITION.
ENDCLASS.
CLASS lcl_test_sub IMPLEMENTATION.
METHOD display_sub.
set_info( 'hello sub' ).
display_info( ).
protected_method( ).
ENDMETHOD.
METHOD protected_method.
super->protected_method( ).
WRITE:/ 'Call protected method in sub class'.
ENDMETHOD.
ENDCLASS.
*Event Handler
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
on_event FOR EVENT v_event OF lcl_test
IMPORTING ex_info sender.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD on_event.
write:/ ex_info.
ENDMETHOD.
ENDCLASS.
*Using
START-OF-SELECTION.
lcl_test=>display_static_info( ).
DATA obj_test TYPE REF TO lcl_test.
CREATE OBJECT obj_test.
SET HANDLER lcl_event_handler=>on_event FOR obj_test.
obj_test->set_info( 'hello' ).
obj_test->display_info( ).
obj_test->lif_test~display_info( ).
SKIP 2.
WRITE:/ 'Sub Class'.
DATA obj_test_sub TYPE REF TO lcl_test_sub.
CREATE OBJECT obj_test_sub.
obj_test_sub->display_sub( ).