閱讀79 返回首頁    go 技術社區[雲棲]


連載:麵向對象葵花寶典:思想、技巧與實踐(12) - “繼承” 詳解

繼承 = 遺傳

繼承是麵向對象最基本的特征,如果一個語言沒有繼承機製,就談不上真正的麵向對象的語言。

 

繼承本身很好理解,和我們日常生活中的“繼承”概念基本一樣:子承父業!所以,你可以看到麵向對象的編程語言裏麵,有了“父類”、“子類”的概念。

 

但是我個人認為“繼承”這個說法並不確切,一般我們理解“繼承”,都是理解為繼承產業、繼承財產,例如李澤钜繼承李嘉誠的事業。但在麵向對象的領域裏麵,並不是“子類”繼承了“父類”的產業,而是繼承了“父類”的特點,具體來說就是繼承了“屬性和方法”。

 

所以我認為“繼承”更加貼切的說法是類似生物學上的“遺傳”,按照中國話的說法就是“龍生龍,鳳生鳳,老鼠生來會打洞”,麵向對象的繼承意味“子類”遺傳了了某些“父類”的屬性和方法。

 

但就像生物學上的進化論一樣,有遺傳就有變異,正因為有了變異,才會有新的物種產生;有了變異,麵向對象才有子類的出現。

 

當然,麵向對象的進化不是“自然選擇”的結果,而是你——偉大的程序猿——選擇的結果。

除了可以選擇子類如何變異外,你——偉大的程序猿——還可以控製另外一個遺傳因素:你可以決定父類遺傳什麼給子類!

 

也就是說,你可以控製父類將哪些“基因”遺傳下去,你也可以控製子類如何變異出哪些新基因。

所以,你——偉大的程序猿——就是麵向對象世界的“上帝”!

 

 繼承 vs 抽象?

我們來看看一個繼承的實例:

 

 

 

如果你還記得前麵看過的“抽象”一章的內容,你一定會感到很驚訝:

抽象和繼承的圖完全相反,那這兩個東東到底有什麼區別和聯係呢?

 

抽象:是分析和設計過程中的一個動作,一個技巧,通過抽象得出類

繼承:是實現過程中的一個動作,基於抽象結果,通過編程語言的特性,完成抽象圖的模擬。

 

因此,抽象和繼承是前後銜接的關係,先有抽象,通過抽象得出類,後通過繼承來表達抽象結果


================================================ 
轉載請注明出處:https://blog.csdn.net/yunhua_lee/article/details/19818711
================================================ 

最後更新:2017-04-03 12:55:12

  上一篇:go Jar mismatch! Fix your dependencies
  下一篇:go Android之ActionBar、Tabs、Fragment、ViewPager實現標簽頁切換並緩存頁麵