[SAP ABAP] 面向对象程序设计-继承

继承的本质是代码重用

当要构造一个新类时,无需从零开始,可以参考一个已有类,在其基础上新建一个新类
子类可以继承父类所有的属性和方法,并可以在此基础上添加新的特性

子类继承父类所有 Public 和 Protected 的属性和方法

语法格式

CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

<subclass>:子类

<superclass>:父类 

例1

创建一个父类 lcl_vehicle

lcl_vehicle 父类实现了 show_speed 和 accelerate 两个方法

接下来创建 lcl_car 子类继承 lcl_vehicle 父类

INHERITING FROM关键字表示该类从lcl_vehicle类继承

此时lcl_car类并没有IMPLEMENTATION部分,但因为它继承自lcl_vehicle,所以是完成的,可以基于它创建对象

输出结果:

接下来改写show_speed方法

在子类lcl_car的 DEFINITION 区域,在子类新建show_speed方法并在其后面附加 REDEFINITION关键字

使用了 REDEFINITION 修饰的方法必须在 IMPLEMENTATION 区域实现

该show_speed方法不会自动调用父类方法的任何代码,如果需要调用父类的方法代码,用 super 关键字进行调用,super 代表父类

对于 REDEFINITION 重新定义过的方法,当然不能满足于 仅仅使用 super 调用父类方法,这样子类的方法功能与父类完全相同

在子类的方法中,可以编写子类专属的方法实现,比如在 show_speed 方法中用不同于父类的方法显示 car 的速度 

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

完整代码如下所示

REPORT z437_test_2025.

* 父类
CLASS lcl_vehicle DEFINITION.
  PUBLIC SECTION.
    METHODS: show_speed,
             accelerate IMPORTING delta TYPE i.

  PROTECTED SECTION.
    DATA: speed TYPE i.
ENDCLASS.

CLASS lcl_vehicle IMPLEMENTATION.
  METHOD show_speed.
    WRITE: / me->speed.
  ENDMETHOD.

  METHOD accelerate.
    me->speed = me->speed + delta.
  ENDMETHOD.
ENDCLASS.


* 子类
CLASS lcl_car DEFINITION INHERITING FROM lcl_vehicle.
  PUBLIC SECTION.
    METHODS: show_speed REDEFINITION.  " 重写父类方法
ENDCLASS.

CLASS lcl_car IMPLEMENTATION.
  METHOD show_speed.
    WRITE: / 'Car current speed is:', me->speed.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  " 定义变量
  DATA: v1 TYPE REF TO lcl_car.
  " 创建实例
  CREATE OBJECT v1.

  v1->accelerate( 80 ).
  v1->show_speed( ).

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值