SAP ABAP 繼承

2018-01-03 09:08 更新

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

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

  • 一個(gè)類的對(duì)象可以獲取另一個(gè)類的屬性。

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

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

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

以下是語(yǔ)法:

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

訪問(wèn)控制和繼承

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

訪問(wèn)公開(kāi)保護(hù)私密
同班YesYesYes
派生類YesYesNo
外面YesNoNo

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

  • 公共繼承 - 從公共超類派生類時(shí),超類的公共成員將成為子類的公共成員,超類的受保護(hù)成員將成為子類的受保護(hù)成員。 超類的私有成員永遠(yuǎn)不能直接從子類訪問(wèn),但可以通過(guò)調(diào)用public和受保護(hù)的超類的成員來(lái)訪問(wèn)。

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

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

子類中的重定義方法

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

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

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

  • 在重定義的方法中,可以使用超級(jí)引用訪問(wèn)直接超類的組件。

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

例子

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)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)