ABAP 面向对象程序设计 (04)- 继承

ABAP 语言在实现面向对象的继承上总体与其它语言类似,区别主要是语法。本篇从语法的角度介绍 ABAP 如何实现继承。

ABAP 继承要点:

  • object 类是所有类的祖先,object 是一个空的抽象类,没有任何属性和方法
  • 子类继承父类所有 public 和 protected 的属性和方法
  • ABAP 只支持单继承
  • 支持子类对方法进行改写 (override),使用 redefinition 关键字

本篇将创建一个父类 lcl_vehicle 和一个子类 lcl_car,lcl_car 继承自 lcl_vehicle。首先创建 lcl_vehicle:


lcl_vehicle 类实现了 show_speed 和 accelerate 两个方法。接下来创建 lcl_car 类继承自 lcl_vehilce。


inheriting from 关键字表示该类从 lcl_vehicle 类继承。此时 lcl_car 类并没有 implementation 部分,但因为它继承自 lcl_vehilce,所以是完整的,可以基于它创建对象:

接下来,假如我们需要改写(其他语言一般称作 override) show_speed 方法,可以在类的 definition区,在该方法后面附加 redefinition 关键字。使用了 redefinition 修饰的方法必须在 implementation 区实现。该方法不会自动调用父类方法的任何代码,如果需要调用父类的方法代码,用 super 关键字进行调用,super 代表父类。


对于 redefinition 重新定义过的方法,当然不能满足于 仅仅使用 super 调用父类方法,这样子类的方法功能与父类完全相同。在子类的方法中,可以编写子类专属的方法实现,比如在 show_speed 方法中用不同于父类的方法显示 car 的速度:


因为这里要用到 speed 属性,这个属性是 lcl_vehicle 类的 private 属性,子类 lcl_car 不能访问,将 lcl_vehicle 的 speed 属性改为 protected 才行。

源码

Github - ABAP OOP

猜你喜欢

转载自blog.csdn.net/stone0823/article/details/108700251