SAP ABAP继承
面向对象编程中最重要的概念之一是继承。
继承允许我们根据另一个类定义一个类,这使得创建和维护应用程序变得更加容易。这也提供了重用代码功能和快速实现的机会
当创建类时,程序员可以指定新类应该继承现有类的成员,而不是写入完全新的数据成员和方法。
此现有类称为基类或者超类,新类称为派生类或子类
1.一个类的对象可以获取另一个类的属性
2.派生类继承超类的数据和方法。但是它们可以覆盖方法,并添加新的方法。
3.继承的主要有点事可重用性。
除了类定义语句之外,还使用"INHERITING FROM"指定继承关系。
以下是语法:
CLASS DEFINITON INHERITING FROM .
例子
Report ZINHERITAN_1.
CLASS Parent Definiton.
PUBLIC Section.
Data: w_public(25) Value ‘This is public data’.
Methods : ParentM.
ENDCLASS.
CLASS Child Definition Inheriting From Parent.
PUBLIC Section.
Methods:ChildM.
ENDCLASS.
Start-of-selection.
Data: Parent Type Ref To Parent,
Child Type Ref To Child.
Creat Object:Parent,Child.
Call Method: Parent->ParentM,
child->childM
上述代码产生如下输出:
This is public data
Method in child class
This is public data
访问控制和继承
派生类可以访问其基类的所有非私有成员。因此,应该不能被子类的成员函数访问的超类成员应该在超类中被声明为私有。我们根据谁可以通过以下方式访问它们来总结不同的访问类型:
访问 公开 保护 私密
同班 Yes Yes Yes
派生类 Yes Yes No
外面 Yes No No
当从一个超类派生一个类时,它可以通过公共,保护或私有继承继承。 继承的类型由访问说明符指定,如上所述。 我们几乎不使用保护或私有继承,但公共继承是常用的。 在使用不同类型的继承时应用以下规则。
公共继承 - 从公共超类派生类时,超类的公共成员将成为子类的公共成员,超类的受保护成员将成为子类的受保护成员。 超类的私有成员永远不能直接从子类访问,但可以通过调用public和受保护的超类的成员来访问。
受保护的继承 - 从受保护的超类派生时,超类的公共和受保护成员将成为子类的受保护成员。
私有继承 - 从私有超类派生时,超类的公共和受保护成员将成为子类的私有成员。
子类中的重定义方法
超类的方法可以在子类中重新实现。重新定义方法的几个规则:
1.继承方法的重定义语句必须与原始方法的定义在同一节中
2.如果重新定义一个方法,则不需要在子类中再次输入其接口,而只需要输入方法的名称。
3.在重定义的方法中,可以使用超级引用访问直接超类的组件。
4.伪引用超级只能在重定义的方法中使用。
Report Zinheri_Redefine.
CLASS super_class Definition.
Public Section.
Methods: Addition1 importing g_a TYPE I
g_b TYPE I
exporting g_c TYPE I.
ENDCLASS.
CLASS super_class Implementation.
Method Addition1.
g_c = g_a + g_b.
EndMethod.
ENDCLASS.
CLASS sub_class Definition Inheriting From super_class.
Public Section.
METHODS: Addition1 Redefinition.
ENDCLASS.
CLASS sub_class Implementation.
Method Addition1.
g_c = g_a + g_b + 10.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Parameters: P_a Type I, P_b TYPE I.
Data: H_Addition1 TYPE I.
Data: H_Sub TYPE I.
Data: Ref1 TYPE Ref TO sub_class.
Create Object Ref1.
Call Method Ref1→Addition1 exporting g_a = P_a
g_b = P_b
Importing g_c = H_Addition1.
Write:/ H_Addition1.