
- 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