CLASS lcl_vehicle DEFINITION ABSTRACT. PUBLIC SECTION. METHODS: display ABSTRACT. " 可以有普通方法 METHODS: get_speed RETURNING VALUE(rv_speed) TYPE i. ENDCLASS.
" 不能: CREATE OBJECT lo_vehicle TYPE lcl_vehicle. ← 错误! " 可以: CREATE OBJECT lo_car TYPE lcl_car. ← 正确 " 可以: DATA: lo_v TYPE REF TO lcl_vehicle = lo_car. ← up-cast
💡抽象类引用可以用于多态
虽然不能创建抽象类的实例,但可以使用抽象类的引用通过 up-cast 指向子类实例,实现多态调用。
抽象方法 (Abstract Method)
1 2
METHODS: calculate_price ABSTRACT RETURNING VALUE(rv_price) TYPE decfloat16.
只有声明,没有实现
子类必须实现(除非子类也是抽象类)
不能在 PRIVATE SECTION 中声明
最终类 (Final Class)
1 2 3 4 5 6
CLASS lcl_math_utils DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: calculate IMPORTING !iv_value TYPE i RETURNING VALUE(rv_result) TYPE i. ENDCLASS.
特性
规则
说明
不能被继承
没有子类
所有方法隐式为最终
不能重定义不存在的继承
可以正常实例化
和普通类一样
同时抽象和最终
理论上可以但只应包含静态组件
没有实际继承价值
最终方法 (Final Method)
1 2 3 4 5
CLASS lcl_vehicle DEFINITION. PUBLIC SECTION. METHODS: get_speed FINAL " 不能在子类中重定义 RETURNING VALUE(rv_speed) TYPE i. ENDCLASS.