深入剖析C 繼承機制3

2021-03-31 08:56:58 字數 1583 閱讀 4242

三. 訪問與隱藏基類成員

(1) 訪問基類成員

通過base 關鍵字訪問基類的成員:

呼叫基類上已被其他方法重寫的方法。

指定建立派生類例項時應呼叫的基類建構函式。

基類訪問只能在建構函式、例項方法或例項屬性訪問器中進行。

從靜態方法中使用 base 關鍵字是錯誤的。

示例:下面程式中基類 person 和派生類 employee 都有乙個名為 getinfo 的方法。通過使用 base 關鍵字,可以從派生類中呼叫基類上的 getinfo 方法。

using system ;

public class person

", name) ;

console.writeline("編號: ", ssn) ;}}

class employee: person

", id) ;}}

class testclass }

程式執行輸出:

姓名: 張三

編號: 111-222-333-444

成員id: abc567efg23267

示例:派生類同基類進行通訊。

using system ;

public class parent

public parent(string mystring)

public void print( )

}public class child : parent

public void print( )

public static void main( ) }

程式執行輸出:

from derived

child constructor.

i'm a parent class.

i'm a child class.

i'm a parent class.

說明:1.派生類在初始化的過程中可以同基類進行通訊。

上面**演示了在子類的建構函式定義中是如何實現同基類通訊的。分號":"和關鍵字base用來呼叫帶有相應引數的基類的建構函式。輸出結果中,第一行表明:基類的建構函式最先被呼叫,其實在引數是字串"from derived"。

2.有時,對於基類已有定義的方法,打算重新定義自己的實現。

child類可以自己重新定義print( )方法的實現。child的print( )方法覆蓋了parent中的 print 方法。結果是:除非經過特別指明,parent類中的print方法不會被呼叫。

3.在child類的 print( ) 方法中,我們特別指明:呼叫的是parent類中的 print( ) 方法。

方法名前面為"base",一旦使用"base"關鍵字之後,你就可以訪問基類的具有公有或者保護許可權的成員。 child類中的print( )方法的執行結果出現上面的第三行和第四行。

4.訪問基類成員的另外一種方法是:通過顯式型別轉換。

在child類的main( )方法中的最後一條語句就是這麼做的。記住:派生類是其基類的特例。這個事實告訴我們:可以在派生類中進行資料型別的轉換,使其成為基類的乙個例項。上面**的最後一行實際上執行了parent類中的 print( )方法。

深入剖析C 繼承機制2

二 c 中的繼承符合下列規則 1 繼承是可傳遞的。如果c從b中派生,b又從a中派生,那麼c不僅繼承了b中宣告的成員,同樣也繼承了a中的成員。object 類作為所有類的基類。2 派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去已經繼承的成員的定義。3 建構函式和析構函式不能被繼承。除...

深入剖析C 繼承機制4

2 隱藏基類成員 想想看,如果所有的類都可以被繼承,繼承的濫用會帶來什麼後果?類的層次結構體系將變得十分龐,大類之間的關係雜亂無章,對類的理解和使用都會變得十分困難。有時候,我們並不希望自己編寫的類被繼承。另一些時候,有的類已經沒有再被繼承的必要。c 提出了乙個密封類 sealed class 的概...

深入剖析C 繼承機制6

五 繼承與訪問修飾符 訪問修飾符是一些關鍵字,用於指定宣告的成員或型別的可訪問性。類的繼承中有四個訪問修飾符 public protected internal private。使用這些訪問修飾符可指定下列五個可訪問性級別 public protected internal internal pro...