mengyuxin

Polymorphism

Apr 18th, 2021
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 3.81 KB | None | 0 0
  1. *&---------------------------------------------------------------------*
  2. *& Report ZMENG_POLYMORPHISM
  3. *&---------------------------------------------------------------------*
  4. *&  /sap_abap/sap_abap_polymorphism.html
  5. *&---------------------------------------------------------------------*
  6. *术语多态性字面意思是“多种形式”。
  7. *从面向对象的角度来看,多态性与继承一起工作,使得继承树中的各种类型可以互换使用。
  8. *也就是说,当存在类的层次结构并且它们通过继承相关时,发生多态性。
  9. *ABAP多态意味着对方法的调用将导致根据调用方法的对象的类型执行不同的方法。
  10.  
  11. REPORT zmeng_08_polymorphism.
  12.  
  13.  
  14. *& 以下程序包含一个抽象类'class_prgm',2个子类(class_procedural和class_OO)
  15. *& 和一个测试驱动程序类'class_type_approach'。
  16. *& 在这个实现中,类方法“开始”允许我们显示编程的类型及其方法。
  17. *& 如果仔细观察方法“start”的签名,您将观察到它接收到类型为class_prgm的导入参数。
  18. *& 但是,在Start-Of-Selection事件中,此方法在运行时
  19. *& 已调用类型为class_procedural和class_OO的对象。
  20.  
  21. CLASS class_prgm DEFINITION ABSTRACT. "抽象
  22.   PUBLIC SECTION.
  23.   METHODS: prgm_type ABSTRACT,
  24.            approach1 ABSTRACT.
  25. ENDCLASS.
  26.  
  27.  
  28. *&---------------------------------------------------------------------*
  29. * procedural
  30. *&---------------------------------------------------------------------*
  31. CLASS class_procedural DEFINITION INHERITING FROM class_prgm.
  32.   PUBLIC SECTION.
  33.   METHODS: prgm_type REDEFINITION,
  34.            approach1 REDEFINITION.
  35. ENDCLASS.
  36.  
  37. CLASS class_procedural IMPLEMENTATION.
  38.   METHOD prgm_type.
  39.     WRITE: 'Procedural programming'.
  40.   ENDMETHOD.
  41.  
  42.   METHOD approach1.
  43.     WRITE: 'top-down approach'.
  44.   ENDMETHOD.
  45. ENDCLASS.
  46.  
  47.  
  48. *&---------------------------------------------------------------------*
  49. * class_oo
  50. *&---------------------------------------------------------------------*
  51. CLASS class_oo DEFINITION INHERITING FROM class_prgm.
  52.   PUBLIC SECTION.
  53.   METHODS: prgm_type REDEFINITION,
  54.            approach1 REDEFINITION.
  55. ENDCLASS.
  56.  
  57. CLASS class_oo IMPLEMENTATION.
  58.   METHOD prgm_type.
  59.     WRITE: 'Object oriented programming'.
  60.   ENDMETHOD.
  61.  
  62.   METHOD approach1.
  63.     WRITE: 'bottom-up approach'.
  64.   ENDMETHOD.
  65. ENDCLASS.
  66.  
  67.  
  68. *&---------------------------------------------------------------------*
  69. * class_type_approach
  70. *&---------------------------------------------------------------------*
  71. CLASS class_type_approach DEFINITION.
  72.   PUBLIC SECTION.
  73.     CLASS-METHODS: start IMPORTING class1_prgm TYPE REF TO class_prgm.
  74. ENDCLASS.
  75.  
  76. CLASS class_type_approach IMPLEMENTATION.
  77.   METHOD start.
  78.     CALL METHOD class1_prgm->prgm_type.
  79.     WRITE: 'follows'.
  80.     CALL METHOD class1_prgm->approach1.
  81.   ENDMETHOD.
  82. ENDCLASS.
  83.  
  84. *&---------------------------------------------------------------------*
  85. *& Start of selection
  86. *&---------------------------------------------------------------------*
  87. START-OF-SELECTION.
  88.   DATA: class_1 TYPE REF TO class_procedural,
  89.         class_2 TYPE REF TO class_oo.
  90.  
  91.   CREATE OBJECT class_1.
  92.   CREATE OBJECT class_2.
  93.  
  94.   CALL METHOD class_type_approach=>start
  95.      EXPORTING
  96.        class1_prgm = class_1.
  97.  
  98.   NEW-LINE.
  99.  
  100.   CALL METHOD class_type_approach=>start
  101.     EXPORTING
  102.       class1_prgm = class_2.
  103.  
  104.  
  105. *上面的代码产生以下输出:
  106. *&---------------------------------------------------------------------*
  107. *procedural programming follows top-down approach
  108. *object oriented programming follows bottom-up approach
  109.  
Add Comment
Please, Sign In to add comment