`
jgtang82
  • 浏览: 396334 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • ABAP
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics