C#-面向物件之繼承2 092

透過上一節的學習,知道了什麼是繼承,繼承的好處以及繼承的簡單應用,現在說說繼承的兩個特性

特性1:繼承具有單根性,就是指父類只能有一個,就像一個人只能有一個親生父親一樣,如果就想讓子類有多個“父類”,可以使用介面實現了(之後說到多型時再說)

比如又有一個名為SuperMan的類,他有一個跑步的方法,我們想讓子類也擁有這個方法

C#-面向物件之繼承2 092

只能繼承自一個父類

讓學生類不僅繼承自people類,同時繼承SuperMan類就會出現此錯誤提示

圖中基類(SuperMan)與派生類(Student)的意思和父類與子類是一個意思

之前說過任何一個類都隱式繼承自Object類,都已經有一個父類(Object),既然繼承具有單根性,為什麼還能繼承People類並且不報錯,而我們寫的就會報錯,因為一個類如果沒有繼承自任何父類,這個類就會隱式的繼承Object類,但是一個類一旦顯示繼承自某個類,Object類就會被覆蓋掉,可以透過反編譯工具檢視,與構造方法類似,不寫系統新增一個,一旦寫了就會覆蓋系統的

特性2:傳遞性 父類繼承了他的父類的成員,子類繼承父類時不止繼承父類的成員還繼承了父類的父類的成員,相當於同時繼承了父類與爺爺輩的成員

C#-面向物件之繼承2 092

繼承的傳遞性

還是之前的例子,圖中除了自身與繼承自父類的成員外,還有其他的成員這些成員繼承自Object類,雖然我們自己寫的父類會覆蓋掉Object類,但一定要記住,

所有的類都繼承自Object類,其他語言不清楚是不是,在C#中Object類可以稱其為祖宗類,還有例如int,string等資料型別,結構,介面等都繼承自Object

繼承父類的公共成員我們知道,至於其是否同時也繼承了父類的私有成員,暫時不用管,不管父類私有成員是否被子類繼承,反正子類也無法使用(私有成員只能本類中可以使用),這些終極問題由像牛叉的架構師等大佬級別來考慮吧