Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 2.01 KB | None | 0 0
  1. report zrep_obj_local.
  2.  
  3. class lcl_parent definition.
  4.   public section.
  5.     methods
  6.       : parent_method
  7.       .
  8. endclass.
  9. class lcl_parent implementation.
  10.   method parent_method.
  11.     write :/ |Parent method|.
  12.   endmethod.
  13. endclass.
  14. *--------------------------------------------------------------------*
  15. class lcl_child definition inheriting from lcl_parent.
  16.   public section.
  17.     methods
  18.       : parent_method redefinition
  19.       , child_method
  20.       .
  21. endclass.
  22. class lcl_child implementation.
  23.   method child_method.
  24.     write :/ |My own child method|.
  25.   endmethod.
  26.   method parent_method.
  27.     write :/ |Redefined parent method|.
  28.   endmethod.
  29. endclass.
  30.  
  31. start-of-selection.
  32.   data
  33.         : lo_parent type ref to lcl_parent
  34.         , lo_child  type ref to lcl_child
  35.         .
  36.  
  37.   create object
  38.                   : lo_parent
  39.                   , lo_child
  40.                   .
  41.   lo_parent->parent_method( ).
  42.   lo_child->child_method( ).
  43.   lo_child->parent_method( ).
  44. * upcast, сужение ракусра
  45.   write :/ |*upcast, сужение ракусра|.
  46.   lo_parent = lo_child.
  47.   lo_parent->parent_method( ).    "вызывается реализация в lcl_child
  48. *  lo_parent->child_method( ).    "дочерний метод недоступен для вызова при upcast-присвоении
  49.   clear
  50.         : lo_parent
  51.         , lo_child
  52.         .
  53.   create object
  54.                 : lo_parent
  55.                 , lo_child
  56.                 .
  57.   lo_parent = lo_child.
  58. *   downcast расширение, оба метода доступны в одном объекте -> расширение ракурса:
  59.  
  60.   write :/ |*downcast, расширение ракусра|.
  61.   DATA(lo_child2) = NEW lcl_child( ).
  62. *  lo_child2 = lo_parent.          "нельзя присваивать, ошибка при компиляции
  63.   lo_child2 ?= lo_parent.
  64.   lo_child2->parent_method( ).     "Конечно, вызывается реализация в lcl_child
  65.   lo_child2->child_method( ).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement