物件導向之繼承

2021-09-10 09:56:28 字數 3803 閱讀 6314

介紹:

第一天的內容主要是不同情形下的方法過載。這一部分則主要講物件導向中繼承的概念。首先用乙個要點圖形來定義繼承。

繼承

乙個簡單的例子:

classa:

classclassa:classb

}

classb:

classclassb

publicvoiddisplay2()

}

classprogram

}

/*

輸出結果:

classa display1

classb display1

*/

在如上的例子中,classb是父類,classa是子類,classa繼承自classb(或classb派生出classa)。

這個例子也會得到乙個警告:「classa.display1()」隱藏繼承的成員「classb.display1()」。如果是有意隱藏,請使用關鍵字 new。  意思是說classa中的成員和classb中的成員一樣,這樣基類的就被隱藏了。如果故意為之,可以用"public new void display1()"來代替。

知識點:我們可以在子類中定義和基類名稱相同的成員,並且子類中的方法總是優先執行然後才是基類(遇到同名的情況時)。當然也可以用base關鍵字,在子類中呼叫基類中的成員。另外,繼承不能向後相容(意思就是說基類的例項無法呼叫派生類的成員,這很好理解)。除了建構函式和析構函式,我們可以從基類繼承任何成員。

對於類的成員,有兩種型別:

publicclassclassb

publicclassclassa : classb

//編譯時其實是:

publicclassclassb:object

publicclassclassa : classb

在c#中,如果乙個類沒有繼承任何類,那麼它也會預設繼承自object類,它是所有類的共同的基類。另外一些特殊的類如:system.valuetype、system.delegate等無法繼承。

再看乙個例子:

publicclassclassw

publicclassclassx

publicclassclassy : classw, classx

這樣定義classsy時,會報錯。知識點:在c#,乙個類只能繼承自乙個類,不支援多繼承。(其實c#的多繼承可以通過介面來完成)

再看乙個例子:

publicclassclassw:classy

publicclassclassx:classw

publicclassclassy :  classx

這樣也會報錯:涉及「classy」和「classw」的迴圈基類依賴項....(3個錯誤)

知識點:c#中不允許迴圈相依(circular dependency)。也就是互相繼承

再看乙個例子:

publicclassclassb

publicclassclassa:classb

///

/// program: used to execute the method.

/// contains main method.

///

publicclassprogram

}

知識點:我們可以把乙個派生類物件賦值給基類,但反過來不行。既(基類物件=派生類物件,可以;派生類物件=基類物件,不行)

我們可以在派生類中宣告已經在基類中宣告的同名函式。

派生類物件呼叫方法時,基類總是優先執行。

保留的關鍵字「base」可以在派生類中用於呼叫基類方法。

繼承不能向後相容。

除了建構函式和析構函式,乙個類可以從其基類繼承一切。

在 c# 中的繼承,自定義類不能派生自特殊建在 c# 之類的命令、 system.enum、 system.delegate、 system.array 等。

父類只可以有乙個。c# 不支援多重繼承通過類。

在 c# 中的繼承中不允許迴圈依賴項。

我們可以將派生類物件賦值給基類,而不是相反。

我們不能將 int 隱式轉換為char,但char可以轉換為 int。

物件導向之繼承

此段摘自 繼承方式限定了基類成員在派生類中的訪問許可權,包括 public 公有的 private 私有的 和 protected 受保護的 此項是可選的,如果不寫,預設為 private 或 protected。不要將繼承方式和成員屬性搞混了,不同的繼承方式會賦予繼承來的成員不同的屬性 簡單說一下...

物件導向之繼承

繼承 是一種新建類的方式,新建的類稱為子類,被繼承的類稱為父類 基類,超類 繼承描述的是一種遺傳關係,子類可以使用父類的屬性 注意 1 乙個類可以同時繼承多個父類 2 python中類分為兩種 新式類 繼承了object的類叫新式類,python3中所有的類都繼承了object類,即python3中...

物件導向之繼承

練習題 練習題 1class base def init self,num self.num num deffunc1 self print self.num class foo base pass obj foo 123 obj.func1 2 class base def init self,n...