ABAP Keyword Documentation → ABAP - Reference → Declarative statemnts → Classes and Interfaces → ABAP Objects - Overview → Examples for ABAP Objects
ABAP Objects, Overview
This example demonstrates objects, object references, inheritance, interfaces, and events.
Other versions: 7.31 | 7.40 | 7.54
Source Code
REPORT demo_abap_objects.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Global Selection Screen</span>
<span class="blue">*---------------------------------------------------------------------*</span>
SELECTION-SCREEN BEGIN OF SCREEN 100 AS WINDOW TITLE text-100.
PARAMETERS: button1 RADIOBUTTON GROUP grp,
button2 RADIOBUTTON GROUP grp,
button3 RADIOBUTTON GROUP grp,
button4 RADIOBUTTON GROUP grp.
SELECTION-SCREEN END OF SCREEN 100.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* INTERFACE status</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Interface definition *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
INTERFACE status.
METHODS write.
ENDINTERFACE.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* CLASS vessel DEFINITION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Superclass definition *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
CLASS vessel DEFINITION.
PUBLIC SECTION.
METHODS: constructor,
drive
IMPORTING speed_up TYPE i,
get_id
RETURNING value(id) TYPE i.
PROTECTED SECTION.
DATA: speed TYPE i,
max_speed TYPE i VALUE 100.
PRIVATE SECTION.
CLASS-DATA object_count TYPE i.
DATA id TYPE i.
ENDCLASS.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* CLASS vessel IMPLEMENTATION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Superclass implementation *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
CLASS vessel IMPLEMENTATION.
METHOD constructor.
object_count = object_count + 1.
id = object_count.
ENDMETHOD.
METHOD drive.
speed = speed + speed_up.
IF speed > max_speed.
speed = max_speed.
ENDIF.
ENDMETHOD.
METHOD get_id.
id = me->id.
ENDMETHOD.
ENDCLASS.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* CLASS ship DEFINITION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Subclass definition *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
CLASS ship DEFINITION INHERITING FROM vessel.
PUBLIC SECTION.
INTERFACES status.
DATA name TYPE string READ-ONLY.
METHODS: constructor
IMPORTING name TYPE string,
drive
REDEFINITION.
EVENTS emergency_call.
ENDCLASS.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* CLASS ship IMPLEMENTATION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Subclass implementation *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
CLASS ship IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
max_speed = 30.
me->name = name.
ENDMETHOD.
METHOD status~write.
DATA id TYPE c LENGTH 1.
id = me->get_id( ).
WRITE: / name, 'is vessel', id,
'and has speed', speed.
ENDMETHOD.
METHOD drive.
speed = speed + speed_up.
IF speed > max_speed.
max_speed = 0.
speed = 0.
RAISE EVENT emergency_call.
ENDIF.
ENDMETHOD.
ENDCLASS.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* CLASS coast_guard DEFINITION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Event handler definition *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
CLASS coast_guard DEFINITION.
PUBLIC SECTION.
INTERFACES status.
METHODS receive
FOR EVENT emergency_call OF ship
IMPORTING sender.
ALIASES write FOR status~write.
PRIVATE SECTION.
DATA caller TYPE string.
ENDCLASS.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* CLASS coast_guard IMPLEMENTATION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Event handler implementation *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
CLASS coast_guard IMPLEMENTATION.
METHOD status~write.
IF caller IS INITIAL.
WRITE: / 'Coast guard received no call'.
ELSE.
WRITE: / 'Coast guard received a call from', caller.
ENDIF.
ENDMETHOD.
METHOD receive.
caller = sender->name.
write( ).
ENDMETHOD.
ENDCLASS.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* CLASS main DEFINITION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Main class definition *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
CLASS main DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: start,
objects,
inheritance,
interfaces,
events.
ENDCLASS.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* CLASS main IMPLEMENTATION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Main class implementation *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
CLASS main IMPLEMENTATION.
METHOD start.
CALL SELECTION-SCREEN 100 STARTING AT 10 3
ENDING AT 42 7.
IF sy-subrc NE 0.
EXIT.
ELSEIF button1 = 'X'.
objects( ).
ELSEIF button2 = 'X'.
inheritance( ).
ELSEIF button3 = 'X'.
interfaces( ).
ELSEIF button4 = 'X'.
events( ).
ENDIF.
ENDMETHOD.
METHOD objects.
DATA: vessel1 TYPE REF TO vessel,
vessel2 TYPE REF TO vessel.
DATA: vessel_id TYPE i.
CREATE OBJECT: vessel1 TYPE vessel,
vessel2 TYPE vessel.
vessel1->drive( 50 ).
vessel2->drive( 80 ).
vessel_id = vessel1->get_id( ).
WRITE: / 'Vessel ID is', vessel_id.
vessel_id = vessel2->get_id( ).
WRITE: / 'Vessel ID is', vessel_id.
ENDMETHOD.
METHOD inheritance.
DATA: vessel TYPE REF TO vessel,
ship TYPE REF TO ship.
CREATE OBJECT ship TYPE ship EXPORTING name = 'Titanic'.
ship->drive( 20 ).
MOVE ship TO vessel.
vessel->drive( 10 ).
ship->status~write( ).
ENDMETHOD.
METHOD interfaces.
DATA: status_tab TYPE TABLE OF REF TO status,
status TYPE REF TO status,
ship TYPE REF TO ship,
station TYPE REF TO coast_guard.
CREATE OBJECT ship EXPORTING name = 'Titanic'.
APPEND ship TO status_tab.
CREATE OBJECT station.
APPEND station TO status_tab.
LOOP AT status_tab INTO status.
status->write( ).
ENDLOOP.
ENDMETHOD.
METHOD events.
DATA: ship TYPE REF TO ship,
station TYPE REF TO coast_guard.
CREATE OBJECT: ship EXPORTING name = 'Titanic',
station.
SET HANDLER station->receive FOR ship.
DO 5 TIMES.
ship->drive( 10 ).
ENDDO.
ENDMETHOD.
ENDCLASS.
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* System event START-OF-SELECTION</span>
<span class="blue">*---------------------------------------------------------------------*</span>
<span class="blue">* Triggered by the ABAP runtime environment automatically *</span>
<span class="blue">*---------------------------------------------------------------------*</span>
START-OF-SELECTION.
main=>start( ).
<span class="blue">*---------------------------------------------------------------------*</span>
Description
The program contains a class main
with a method start
which is called at program start and demonstrates the use of ABAP objects using the example of classes of water vehicles.