Class def & impl, Inherit & overwriting, interface & using it, event & handler

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( ).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值