W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
面向?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)其基類的所有非私有成員。 因此,應(yīng)該不能被子類的成員函數(shù)訪問(wèn)的超類成員應(yīng)該在超類中被聲明為私有的。 我們可以根據(jù)誰(shuí)可以通過(guò)以下方式訪問(wèn)它們來(lái)總結(jié)不同的訪問(wèn)類型:
訪問(wèn) | 公開(kāi) | 保護(hù) | 私密 |
---|---|---|---|
同班 | Yes | Yes | Yes |
派生類 | Yes | Yes | No |
外面 | Yes | No | No |
當(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)生以下輸出 :
Redefinition Demo 29
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: