- SAP ABAP 教程
- SAP ABAP - 首页
- SAP ABAP - 概述
- SAP ABAP - 环境
- SAP ABAP - 屏幕导航
- SAP ABAP - 基本语法
- SAP ABAP - 数据类型
- SAP ABAP - 变量
- SAP ABAP - 常量和字面量
- SAP ABAP - 运算符
- SAP ABAP - 循环控制
- SAP ABAP - 决策
- SAP ABAP - 字符串
- SAP ABAP - 日期和时间
- SAP ABAP - 数据格式化
- SAP ABAP - 异常处理
- SAP ABAP - 字典
- SAP ABAP - 域
- SAP ABAP - 数据元素
- SAP ABAP - 表
- SAP ABAP - 结构
- SAP ABAP - 视图
- SAP ABAP - 搜索帮助
- SAP ABAP - 锁对象
- SAP ABAP - 模块化
- SAP ABAP - 子程序
- SAP ABAP - 宏
- SAP ABAP - 函数模块
- SAP ABAP - 包含程序
- SAP ABAP - Open SQL 概述
- SAP ABAP - Native SQL 概述
- SAP ABAP - 内部表
- SAP ABAP - 创建内部表
- ABAP - 填充内部表
- SAP ABAP - 复制内部表
- SAP ABAP - 读取内部表
- SAP ABAP - 删除内部表
- SAP ABAP - 面向对象
- SAP ABAP - 对象
- SAP ABAP - 类
- SAP ABAP - 继承
- SAP ABAP - 多态性
- SAP ABAP - 封装
- SAP ABAP - 接口
- SAP ABAP - 对象事件
- SAP ABAP - 报表编程
- SAP ABAP - 对话编程
- SAP ABAP - 智能表单
- SAP ABAP - SAPscript
- SAP ABAP - 客户出口
- SAP ABAP - 用户出口
- SAP ABAP - 业务附加接口 (BAdI)
- SAP ABAP - Web Dynpro
- SAP ABAP 有用资源
- SAP ABAP - 问答
- SAP ABAP - 快速指南
- SAP ABAP - 有用资源
- SAP ABAP - 讨论
SAP ABAP - 继承
面向对象编程中最重要的概念之一是继承。继承允许我们根据另一个类来定义一个类,这使得创建和维护应用程序更容易。这也提供了重用代码功能和加快实现时间的机会。
创建类时,程序员可以指定新类应该继承现有类的成员,而不是编写全新的数据成员和方法。这个现有类称为**基类**或**超类**,新类称为**派生类**或**子类**。
一个类的对象可以获取另一个类的属性。
派生类继承超类的(数据和)方法。但是,它们可以覆盖方法并添加新方法。
继承的主要优点是可重用性。
继承关系使用类定义语句中的“INHERITING FROM”附加说明来指定。
以下是语法:
CLASS <subclass> DEFINITION INHERITING FROM <superclass>.
示例
Report ZINHERITAN_1. CLASS Parent Definition. 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. CLASS Parent Implementation. Method ParentM. Write /: w_public. EndMethod. ENDCLASS. CLASS Child Implementation. Method ChildM. Skip. Write /: 'Method in child class', w_public. EndMethod. ENDCLASS. Start-of-selection. Data: Parent Type Ref To Parent, Child Type Ref To Child. Create Object: Parent, Child. Call Method: Parent→ParentM, child→ChildM.
以上代码产生以下输出:
This is public data Method in child class This is public data
访问控制和继承
派生类可以访问其基类的所有非私有成员。因此,超类成员不应被子类的成员函数访问,应该在超类中声明为私有。我们可以按照谁可以访问它们来总结不同的访问类型:
访问 | 公共 | 受保护的 | 私有的 |
---|---|---|---|
同一类 | 是 | 是 | 是 |
派生类 | 是 | 是 | 否 |
外部类 | 是 | 否 | 否 |
从超类派生类时,可以通过公共、受保护或私有继承进行继承。继承类型由上面解释的访问说明符指定。我们几乎不使用受保护或私有继承,但公共继承通常使用。使用不同类型的继承时,会应用以下规则。
**公共继承** - 从公共超类派生类时,超类的公共成员成为子类的公共成员,超类的受保护成员成为子类的受保护成员。超类的私有成员永远不能直接从子类访问,但可以通过调用超类的公共和受保护成员来访问。
**受保护的继承** - 从受保护的超类派生时,超类的公共和受保护成员成为子类的受保护成员。
**私有继承** - 从私有超类派生时,超类的公共和受保护成员成为子类的私有成员。
在子类中重新定义方法
超类的方法可以在子类中重新实现。重新定义方法的一些规则:
继承方法的重新定义语句必须与原始方法的定义位于同一节。
如果重新定义方法,则不需要在子类中再次输入其接口,只需输入方法名称。
在重新定义的方法中,可以使用 super 引用访问直接超类的组件。
伪引用 super 只能在重新定义的方法中使用。
示例
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.
执行 F8 后,如果我们输入值 9 和 10,则以上代码会产生以下输出:
Redefinition Demo 29