## 连载:面向对象葵花宝典:思想、技巧与实践(12) - “继承” 详解
**继承 = 遗传**
继承是面向对象最基本的特征,如果一个语言没有继承机制,就谈不上真正的面向对象的语言。
继承本身很好理解,和我们日常生活中的“继承”概念基本一样:子承父业!所以,你可以看到面向对象的编程语言里面,有了“父类”、“子类”的概念。
但是我个人认为“继承”这个说法并不确切,一般我们理解“继承”,都是理解为继承产业、继承财产,例如李泽钜继承李嘉诚的事业。但在面向对象的领域里面,并不是“子类”继承了“父类”的产业,而是继承了“父类”的特点,具体来说就是继承了“属性和方法”。
所以我认为“继承”更加贴切的说法是类似生物学上的“遗传”,按照中国话的说法就是“龙生龙,凤生凤,老鼠生来会打洞”,面向对象的继承意味“子类”遗传了了某些“父类”的属性和方法。
但就像生物学上的进化论一样,有遗传就有变异,正因为有了变异,才会有新的物种产生;有了变异,面向对象才有子类的出现。
当然,面向对象的进化不是“自然选择”的结果,而是你——伟大的程序猿——选择的结果。
除了可以选择子类如何变异外,你——伟大的程序猿——还可以控制另外一个遗传因素:你可以决定父类遗传什么给子类!
也就是说,你可以控制父类将哪些“基因”遗传下去,你也可以控制子类如何变异出哪些新基因。
所以,你——伟大的程序猿——就是面向对象世界的“上帝”!
#### 继承 vs 抽象?
我们来看看一个继承的实例:
![](https://box.kancloud.cn/2016-01-20_569f5cc96f8c4.jpg)
如果你还记得前面看过的“抽象”一章的内容,你一定会感到很惊讶:
抽象和继承的图完全相反,那这两个东东到底有什么区别和联系呢?
抽象:是分析和设计过程中的一个动作,一个技巧,通过抽象得出类
继承:是实现过程中的一个动作,基于抽象结果,通过编程语言的特性,完成抽象图的模拟。
因此,抽象和继承是前后衔接的关系,先有抽象,通过抽象得出类,后通过继承来表达抽象结果
- 前言
- (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模式
- (完)- 书籍已经出版