乙個子類不可以繼承多個父類,繼承的兩個特性:傳遞性,單根性。
父類可以有多個子類,子類只能有乙個父類。
多型就是同一操作作用於不同類的例項,不同的類將進行不同的解釋,最後產生不同的結果。
任何類都可以從另外乙個類繼承,這就是說這個類擁有它繼承除私有成員外的所有成員。
呼叫父類的建構函式時:
在預設情況下c#中使用new建立子類物件時,首先呼叫父類無參建構函式,在呼叫子類建構函式 最後在輸出呼叫的類。例題p84.
使用base關鍵字呼叫父類建構函式:
有時為了資料的安全性,並沒有將父類的所有成員都暴露給子類,如私有成員的字段或屬性,但使用者卻希望在構造子類物件時,初始化父類的私有欄位或屬性。這時只需要在父類中定義相關的建構函式,並在子類中使用base呼叫即可。
這裡的base可以認為它是父類的引用,base()就代表父類建構函式,在子類中還可以使用base呼叫父類的成員,且只能在子類中使用。
c#支援的繼承傳遞沒有限制傳遞次數,但可以使用關鍵字 sealed 定義類,讓該類無法派生子類,這個就是c#中的密封類。
訪問與隱藏成員
使用 new修飾符可以顯示的隱藏父類繼承的成員,若要隱藏繼承成員,須使用相同名稱在派生類中宣告該成員,並用new修飾符修飾它
解決前面的問題可以使用new關鍵字定義子類中的成員,同時可以使用base訪問父類的成員,這樣程式就可以區分該同名成員是子類特有的還是繼承自父類。
強制型別轉換:
第乙個: ((父類)變數).方法名
第二個: if(變數名 is 父類)
多型虛方法:c#中的virtual 關鍵字,用於將方法定義為支援多型的虛方法。被關鍵字 virtual定義的類方法。
c#中override關鍵字,用於子類中修改父類方法的實現。採用override重寫的方法,在父類必須定義為 virtual(虛方法)和abstract(抽象方法)
virtual關鍵字使用規則:
使用 virtual定義 的類成員可稱為 虛成員,子類採用override進行重寫成為虛成員重寫。
使用virtual定義類成員,以及使用override重寫父類成員需要注意:
父類的虛成員被重寫時,需要使用相同的訪問修飾。
在類的成員宣告前加上 virtual關鍵字後,不能再有 abstract,static或者override 關鍵字。
如果子類使用new 隱藏父類的成員,就不能在該成員宣告中使用 override關鍵字。
new,static和virtual關鍵字不能與override 一同使用。
object類中的方法:
c#語言永昌不要求類宣告從object類中繼承。因為繼承是隱式的,由於c#中的所有類均從object派生,所以object類中定義的公有方法可用於系統中的所有物件,派生類可以重寫某些方法,object包含如下公共方法:
public virtual bool equals(object ob):用於判斷指定的物件是否等於呼叫方法的物件。
public virtual bool equals(object ob1,object ob2):用於判斷當前兩個物件例項ob1,ob2是否相同。
public virtual int gethashcode();返回當前物件相關的雜湊碼。適合雜湊演算法和資料結構中使用。
public virtual string tostring(); 返回描述類的事例的可讀文字字串 。
public static bool referenceequals(obj ob1,object ob2):靜態方法,判斷物件ob1和ob2是否為用乙個物件。
public type gettype():返回當前物件的資料型別。
C 繼承與多型
派生類繼承基類 又稱父類 超類 的屬性和方法,在此基礎上可以進行修改或新增新的屬性和方法。class 派生類名 繼承方式 基類名 為了保護基類的資料封裝性,無論哪種繼承方式,積累的私有成員在派生類中都是不可見的。1.public繼承 基類的訪問許可權在派生類中不變。公有還是公有,保護還是保護,派生類...
C 繼承與多型
1 分析菱形繼承的問題。2 剖析虛繼承是怎麼解決二義性和資料冗餘的 首先,我們先來看乙個菱形繼承的程式。為了解決以上問題,我們引入虛繼承的語法。可以有效的解決菱形繼承的資料冗餘和二義性問題。1.虛繼承解決了菱形繼承體系裡子類物件包含多份父類物件的資料冗餘問題和浪費空間的問題。2.虛繼承看起來複雜,但...
C 繼承與多型
c 是一種物件導向的語言,最重要的乙個目的就是 提供可重用的 而類繼承就是c 提供來擴充套件和修改類的方法。類繼承就是從已有的類中派生出新的類,派生類繼承了基類的特性,同時可以新增自己的特性。實際上,類與類之間的關係分為三種 組合和繼承。以下是三種關係的 為了更好的理解 基類可以派生出派生類,基類也...