SAP ABAP 继承

面向对象编程中最重要的概念之一是继承。继承让我们可以根据一个类定义另一个类,这使得创建和维护应用程序更加容易。这也提供了重用代码功能和加快实现时间的机会。

创建类时,程序员可以指定新类应继承现有类的成员,而不是编写全新的数据成员和方法。这个现有类称为 基类超类,新类称为 派生类子类

  • 一个类的对象可以获取另一个类的属性。
  • 派生类继承超类的数据和方法。但是,它们可以覆盖方法,也可以添加新方法。
  • 继承的主要优点是可重用性。

继承关系是使用类定义语句中的 INHERITING FROM 添加项指定的。

下面是语法:

  1. CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

实例

  1. Report ZINHERITAN_1.
  2. CLASS Parent Definition.
  3. PUBLIC Section.
  4. Data: w_public(25) Value 'This is public data'.
  5. Methods: ParentM.
  6. ENDCLASS.
  7. CLASS Child Definition Inheriting From Parent.
  8. PUBLIC Section.
  9. Methods: ChildM.
  10. ENDCLASS.
  11. CLASS Parent Implementation.
  12. Method ParentM.
  13. Write /: w_public.
  14. EndMethod. ENDCLASS.
  15. CLASS Child Implementation.
  16. Method ChildM.
  17. Skip.
  18. Write /: 'Method in child class', w_public.
  19. EndMethod.
  20. ENDCLASS.
  21. Start-of-selection.
  22. Data: Parent Type Ref To Parent,
  23. Child Type Ref To Child.
  24. Create Object: Parent, Child.
  25. Call Method: Parent&rarr;ParentM,
  26. child&rarr;ChildM.

结果如下:

  1. This is public data
  2. Method in child class
  3. This is public data

访问控制和继承

派生类可以访问其基类的所有非私有成员。因此,子类的成员函数不应访问的超类成员应在超类中声明为私有。

我们可以根据可以通过以下方式访问它们来总结不同的访问类型:

访问PublicProtectedPrivate
类本身YesYesYes
派生类YesYesNo
外部类YesNoNo

从超类派生类时,可以通过公共继承、受保护继承或私有继承来继承。继承类型由访问说明符指定,如上所述。我们几乎不使用受保护或私有继承,但公共继承是常用的。在使用不同类型的继承时,将应用以下规则。

  • 公共继承 - 当从公共超类派生类时,超类的公共成员成为子类的公共成员,而超类的受保护成员成为子类的受保护成员。超类的私有成员永远不能直接从子类访问,但可以通过调用超类的公共和受保护成员来访问。

  • 受保护继承 - 当从受保护的超类派生时,超类的公共成员和受保护成员成为子类的受保护成员。

  • 私有继承 - 当派生自私有超类时,超类的公共和受保护成员成为子类的私有成员。


在子类中重新定义方法

超类的方法可以在子类中重新实现。重新定义方法的几个规则:

  • 继承方法的重新定义语句必须与原始方法的定义在同一程序区域(section)中。
  • 如果重新定义方法,则无需在子类中再次输入其接口,只需输入方法的名称。
  • 在重新定义的方法中,可以使用超级引用访问直接超类的组件。
  • pseudo reference super 只能用于重定义的方法。
实例
  1. Report Zinheri_Redefine.
  2. CLASS super_class Definition.
  3. Public Section.
  4. Methods: Addition1 importing g_a TYPE I
  5. g_b TYPE I
  6. exporting g_c TYPE I.
  7. ENDCLASS.
  8. CLASS super_class Implementation.
  9. Method Addition1.
  10. g_c = g_a + g_b.
  11. EndMethod.
  12. ENDCLASS.
  13. CLASS sub_class Definition Inheriting From super_class.
  14. Public Section.
  15. METHODS: Addition1 Redefinition.
  16. ENDCLASS.
  17. CLASS sub_class Implementation.
  18. Method Addition1.
  19. g_c = g_a + g_b + 10.
  20. EndMethod.
  21. ENDCLASS.
  22. Start-Of-Selection.
  23. Parameters: P_a Type I, P_b TYPE I.
  24. Data: H_Addition1 TYPE I.
  25. Data: H_Sub TYPE I.
  26. Data: Ref1 TYPE Ref TO sub_class.
  27. Create Object Ref1.
  28. Call Method Ref1Addition1 exporting g_a = P_a
  29. g_b = P_b
  30. Importing g_c = H_Addition1.
  31. Write:/ H_Addition1.

执行 F8 后,如果我们输入值 9 和 10,结果如下: