繼承和多型
派生類具有基類所有非私有資料和行為以及新類自己定義的所有其他資料或行為,即子類具有兩個有效型別:子類的型別和它繼承的基類的型別。
物件可以表示多個型別的能力稱為多型性。
多型性示例
複製** **如下:
public class parent
public void methoda()
public class child:parent
public void methodb()
}class test }}
在上例中,類child既有效的child,又是有效的parent。ochild可以作為型別child,因而具有child本身定義的方法methodb()和基類parent定義的方法methoda();同時,物件ochild也可以強制轉換為child的基類parent的物件oparent。強制轉換不會更改ochild物件的內容,但oparent物件作為型別parent,因而只具有類parent定義的方法methoda()。
將child強制轉換為parent後,可以將該parent重新強制轉換為child。並只有實際上是child例項的那些例項才可以強制轉換為child,否則會產生執行錯誤:無法將型別為parent的物件強制轉換為型別child。
繼承的型別
c#包含兩種繼承型別:實現繼承和介面繼承。
現繼承表示乙個型別派生於乙個基型別,派生類具有基類的所有非私有(非private)資料和行為。在實現繼承中,派生型別的每乙個方法採用基型別的實現**,除非在派生類的定義中指定重寫該方法的實現**。實現繼承一般用於增加現有型別的功能,或許多相關的型別共享一組重要的公共功能場合。
介面繼承表示乙個型別實現若干介面,介面僅包含方法的簽名,故介面繼承不繼承任何實現**。介面繼承一般用於指定該型別具有某類可用的特性,例如,如果指定型別從介面system.idisposable中派生,並在該類中實現idisposable介面的清理資源的方法dispose(),則可以通過工通的機制呼叫該方法以清理資源。由於清理資源的方式特定於不同的型別,故在介面中定義通用的實現**是沒有意義的,介面即契約,型別派生於介面,即保證該類提供該介面規定的功能。
本文標題: c#繼承與多型使用示例
本文位址:
C 繼承與多型
派生類繼承基類 又稱父類 超類 的屬性和方法,在此基礎上可以進行修改或新增新的屬性和方法。class 派生類名 繼承方式 基類名 為了保護基類的資料封裝性,無論哪種繼承方式,積累的私有成員在派生類中都是不可見的。1.public繼承 基類的訪問許可權在派生類中不變。公有還是公有,保護還是保護,派生類...
C 繼承與多型
1 分析菱形繼承的問題。2 剖析虛繼承是怎麼解決二義性和資料冗餘的 首先,我們先來看乙個菱形繼承的程式。為了解決以上問題,我們引入虛繼承的語法。可以有效的解決菱形繼承的資料冗餘和二義性問題。1.虛繼承解決了菱形繼承體系裡子類物件包含多份父類物件的資料冗餘問題和浪費空間的問題。2.虛繼承看起來複雜,但...
C 繼承與多型
c 是一種物件導向的語言,最重要的乙個目的就是 提供可重用的 而類繼承就是c 提供來擴充套件和修改類的方法。類繼承就是從已有的類中派生出新的類,派生類繼承了基類的特性,同時可以新增自己的特性。實際上,類與類之間的關係分為三種 組合和繼承。以下是三種關係的 為了更好的理解 基類可以派生出派生類,基類也...