SAP ABAP 繼承

2018-01-03 09:08 更新

面向?qū)ο缶幊讨凶钪匾母拍钪皇抢^承。 繼承允許我們根據(jù)另一個類定義一個類,這使得創(chuàng)建和維護應(yīng)用程序變得更容易。 這也提供了重用代碼功能和快速實現(xiàn)時間的機會。

當創(chuàng)建類時,程序員可以指定新類應(yīng)該繼承現(xiàn)有類的成員,而不是寫入完全新的數(shù)據(jù)成員和方法。 此現(xiàn)有類稱為基類超類,新類稱為派生類子類

  • 一個類的對象可以獲取另一個類的屬性。

  • 派生類繼承超類的數(shù)據(jù)和方法。 但是,他們可以覆蓋方法,并添加新的方法。

  • 繼承的主要優(yōu)點是可重用性。

除了類定義語句之外,還使用“INHERITING FROM"指定繼承關(guān)系。

以下是語法:

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.

上面的代碼產(chǎn)生以下輸出:

This is public data 
Method in child class 
This is public data

訪問控制和繼承

派生類可以訪問其基類的所有非私有成員。 因此,應(yīng)該不能被子類的成員函數(shù)訪問的超類成員應(yīng)該在超類中被聲明為私有的。 我們可以根據(jù)誰可以通過以下方式訪問它們來總結(jié)不同的訪問類型:

訪問公開保護私密
同班YesYesYes
派生類YesYesNo
外面YesNoNo

當從一個超類派生一個類時,它可以通過公共,保護或私有繼承繼承。 繼承的類型由訪問說明符指定,如上所述。 我們幾乎不使用保護或私有繼承,但公共繼承是常用的。 在使用不同類型的繼承時應(yīng)用以下規(guī)則。

  • 公共繼承 - 從公共超類派生類時,超類的公共成員將成為子類的公共成員,超類的受保護成員將成為子類的受保護成員。 超類的私有成員永遠不能直接從子類訪問,但可以通過調(diào)用public和受保護的超類的成員來訪問。

  • 受保護的繼承 - 從受保護的超類派生時,超類的公共和受保護成員將成為子類的受保護成員。

  • 私有繼承 - 從私有超類派生時,超類的公共和受保護成員將成為子類的私有成員。

子類中的重定義方法

超類的方法可以在子類中重新實現(xiàn)。 重新定義方法的幾個規(guī)則:

  • 繼承方法的重定義語句必須與原始方法的定義在同一節(jié)中。

  • 如果重新定義一個方法,則不需要在子類中再次輸入其接口,而只需要輸入方法的名稱。

  • 在重定義的方法中,可以使用超級引用訪問直接超類的組件。

  • 偽引用超級只能在重定義的方法中使用。

例子

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.

執(zhí)行F8后,如果我們輸入值9和10,上面的代碼產(chǎn)生以下輸出 :

Re-implemented os Sub Class
Redefinition Demo 
29
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號