FavoriteLoading
0

ABAP面向对象(Object Orientation)编程5-类的继承,多态

[隐藏]

1, 类的继承

ABAP 所有的类都是默认继承了系统中的空类 OBJECT.
具有一般性的类称为基类(Superclass), 其各个子类称为派生类(Subclass).
在类定义时, 使用 INHERTING FROM 附加项可以指定派生类和基类之间的继承关系.
ABAP 中的继承为单一继承, 即一个类可以有多个派生类, 但只能有一个直接基类.
在继承过程中各成员的组件可见性如下:
  • 一个派生类中的公有成员包括其本身公有部分定义的成员以及所有基类公有成员, 这些公有成员可以通过选择运算符 "->" 在类外部获得.
  • 一个派生类中的被保护成员包括其本身被保护部分定义的成员以及所有基类的被保护成员. 这些成员不能通过组件选择运算符 "->" 在类外部获得, 但可以在派生类内部使用. 在类外部看, 其行为与类私有成员完全一致.
  • 一个派生类中的私有成员只包括其本身私有部分定义的成员. 这些成员只能在派生类内部使用.
因而, 继承类和基类的公有成员和被保护成员享有共同的命名空间, 而私有成员则在不同类之间可以出现重名情况.
7c7b1600gd39bab47d755&690
参照基类声明的引用变量可以指向其继承类的对象, 如上图所示, 对象 n 是类 Class3的一个实例, 而左侧的三个引用变量 CREF1, CREF2, CREF3 则分别参数类 Class1, Class2, Class3 生成. 这三个类存在继承关系. 参考基类声明的引用变量也可以指向其派生类, 即三个变量均可以指向对象 n, 但要注意的是 CREF1 只能访问 Class1 的公有组件, 而 CREF2 可以访问 Class1 和 Class2的公有组件, CREF3 则可以访问全部类的公有组件.
但特别要注意的是: 尽管基类引用变量可以指向其继承类对象, 然而反之则被视为错误的类型转换.

2, 类的多态

多态性的继承实现.
在继承中, 多态性是通过方法重载及引用变量实现的, 即子类可以重新定义并以不同的方式实现基类中的公有或保护方法, 此时基类中的方法需为实例方法.
在派生类中要这样声明:
该方法必须和基类中的方法具有相同的接口, 但可以通过不同的代码实现.
在方法重载过程中, 如果在派生类内部仍然需要使用基类中的方法, 则可以使用 SUPER 关键字来指定其基类.

3, 例子代码

运行结果:

2017-03-07_12-54-20

以上。