## 連載:面向對象葵花寶典:思想、技巧與實踐(12) - “繼承” 詳解
**繼承?=?遺傳**
繼承是面向對象最基本的特征,如果一個語言沒有繼承機制,就談不上真正的面向對象的語言。
?
繼承本身很好理解,和我們日常生活中的“繼承”概念基本一樣:子承父業!所以,你可以看到面向對象的編程語言里面,有了“父類”、“子類”的概念。
?
但是我個人認為“繼承”這個說法并不確切,一般我們理解“繼承”,都是理解為繼承產業、繼承財產,例如李澤鉅繼承李嘉誠的事業。但在面向對象的領域里面,并不是“子類”繼承了“父類”的產業,而是繼承了“父類”的特點,具體來說就是繼承了“屬性和方法”。
?
所以我認為“繼承”更加貼切的說法是類似生物學上的“遺傳”,按照中國話的說法就是“龍生龍,鳳生鳳,老鼠生來會打洞”,面向對象的繼承意味“子類”遺傳了了某些“父類”的屬性和方法。
?
但就像生物學上的進化論一樣,有遺傳就有變異,正因為有了變異,才會有新的物種產生;有了變異,面向對象才有子類的出現。
?
當然,面向對象的進化不是“自然選擇”的結果,而是你——偉大的程序猿——選擇的結果。
除了可以選擇子類如何變異外,你——偉大的程序猿——還可以控制另外一個遺傳因素:你可以決定父類遺傳什么給子類!
?
也就是說,你可以控制父類將哪些“基因”遺傳下去,你也可以控制子類如何變異出哪些新基因。
所以,你——偉大的程序猿——就是面向對象世界的“上帝”!
?
#### ?繼承?vs?抽象?
我們來看看一個繼承的實例:
?
?
?
如果你還記得前面看過的“抽象”一章的內容,你一定會感到很驚訝:
抽象和繼承的圖完全相反,那這兩個東東到底有什么區別和聯系呢?
?
抽象:是分析和設計過程中的一個動作,一個技巧,通過抽象得出類
繼承:是實現過程中的一個動作,基于抽象結果,通過編程語言的特性,完成抽象圖的模擬。
?
因此,抽象和繼承是前后銜接的關系,先有抽象,通過抽象得出類,后通過繼承來表達抽象結果
- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版