79
技術社區[雲棲]
連載:麵向對象葵花寶典:思想、技巧與實踐(12) - “繼承” 詳解
繼承 = 遺傳
繼承是麵向對象最基本的特征,如果一個語言沒有繼承機製,就談不上真正的麵向對象的語言。
繼承本身很好理解,和我們日常生活中的“繼承”概念基本一樣:子承父業!所以,你可以看到麵向對象的編程語言裏麵,有了“父類”、“子類”的概念。
但是我個人認為“繼承”這個說法並不確切,一般我們理解“繼承”,都是理解為繼承產業、繼承財產,例如李澤钜繼承李嘉誠的事業。但在麵向對象的領域裏麵,並不是“子類”繼承了“父類”的產業,而是繼承了“父類”的特點,具體來說就是繼承了“屬性和方法”。
所以我認為“繼承”更加貼切的說法是類似生物學上的“遺傳”,按照中國話的說法就是“龍生龍,鳳生鳳,老鼠生來會打洞”,麵向對象的繼承意味“子類”遺傳了了某些“父類”的屬性和方法。
但就像生物學上的進化論一樣,有遺傳就有變異,正因為有了變異,才會有新的物種產生;有了變異,麵向對象才有子類的出現。
當然,麵向對象的進化不是“自然選擇”的結果,而是你——偉大的程序猿——選擇的結果。
除了可以選擇子類如何變異外,你——偉大的程序猿——還可以控製另外一個遺傳因素:你可以決定父類遺傳什麼給子類!
也就是說,你可以控製父類將哪些“基因”遺傳下去,你也可以控製子類如何變異出哪些新基因。
所以,你——偉大的程序猿——就是麵向對象世界的“上帝”!
繼承 vs 抽象?
我們來看看一個繼承的實例:
如果你還記得前麵看過的“抽象”一章的內容,你一定會感到很驚訝:
抽象和繼承的圖完全相反,那這兩個東東到底有什麼區別和聯係呢?
抽象:是分析和設計過程中的一個動作,一個技巧,通過抽象得出類
繼承:是實現過程中的一個動作,基於抽象結果,通過編程語言的特性,完成抽象圖的模擬。
因此,抽象和繼承是前後銜接的關係,先有抽象,通過抽象得出類,後通過繼承來表達抽象結果
================================================
轉載請注明出處:https://blog.csdn.net/yunhua_lee/article/details/19818711
================================================
最後更新:2017-04-03 12:55:12