Java 程序设计语言(第四版)读书笔记 第三章 类的扩展
2007-01-09 14:15
246 查看
只要稍微有点OO常识的人,都知道类的扩展,尽管类的扩展是如此基础,然而能够知道什么时候去用,怎么用的人并不多。
下面是书中所探讨的一些原则和例子:
1.如果要创建的类和源类存在"IsA"的关系,那么就适合扩展。
2.尽量用组合(HasA)而非扩展(IsA)。
设想一个Point类,它用(x,y)来表示二维空间中的一个点,如果我们要创建一个表示屏幕上的彩色象素点的Pixel类,我们是否可以让Pixel扩展Point呢?
首先Pixel IsA Point,这意味着所有适合Point的应用,都可以用Pixel来代替。
而对于一个圆(Circle)来说,它是否同样适合扩展Point呢?一个圆并不是一个点,尽管一个圆可以用一个点和一个半径来描述,但是点却具有一些任何
圆都不具有的用处。比如可以将矩形的中心放在某个定点上,而圆则不妥。圆和点的关系是HasA而不是IsA的关系。
正确的选择IsA或是HasA是一件微妙而重要的事情,比如我们可以将员工抽象为Employee类,而将经理Manager扩展Employee,毕竟经理也是员工。
但,更多的情况却是一个人可能有多重身份,比如他是一个项目的经理,却是另一个项目的员工?此时,如果能够引入一个角色类Role,采用Employee HasA Role,
或者更多的Role,如此设计更具有灵活性。
关于如何设计一个可扩展的类,下面摘录一句话:
非final的类又两类接口,其中public类接口是为使用该类的程序员提供的,而protected接口则是为扩展该类的程序员提供的。
这两类接口都是真正的契约,应当精心设计。
下面是书中所探讨的一些原则和例子:
1.如果要创建的类和源类存在"IsA"的关系,那么就适合扩展。
2.尽量用组合(HasA)而非扩展(IsA)。
设想一个Point类,它用(x,y)来表示二维空间中的一个点,如果我们要创建一个表示屏幕上的彩色象素点的Pixel类,我们是否可以让Pixel扩展Point呢?
首先Pixel IsA Point,这意味着所有适合Point的应用,都可以用Pixel来代替。
而对于一个圆(Circle)来说,它是否同样适合扩展Point呢?一个圆并不是一个点,尽管一个圆可以用一个点和一个半径来描述,但是点却具有一些任何
圆都不具有的用处。比如可以将矩形的中心放在某个定点上,而圆则不妥。圆和点的关系是HasA而不是IsA的关系。
正确的选择IsA或是HasA是一件微妙而重要的事情,比如我们可以将员工抽象为Employee类,而将经理Manager扩展Employee,毕竟经理也是员工。
但,更多的情况却是一个人可能有多重身份,比如他是一个项目的经理,却是另一个项目的员工?此时,如果能够引入一个角色类Role,采用Employee HasA Role,
或者更多的Role,如此设计更具有灵活性。
关于如何设计一个可扩展的类,下面摘录一句话:
非final的类又两类接口,其中public类接口是为使用该类的程序员提供的,而protected接口则是为扩展该类的程序员提供的。
这两类接口都是真正的契约,应当精心设计。
相关文章推荐
- Java 程序设计语言(第四版)读书笔记 第一章 快速浏览
- Java 程序设计语言(第四版)读书笔记 第二章 类和对象
- Java 螺纹第三版 第三章数据同步 读书笔记
- 《Java编程思想》第四版读书笔记 第三章
- <java并发编程的艺术>读书笔记-第三章java内存模型(一)
- 读书笔记 — Java高并发程序设计 — 第三章 — 线程池
- Java 并发编程实践基础 读书笔记: 第三章 使用 JDK 并发包构建程序
- Think in Java 第四版 第四章 控制执行程序 读书笔记
- think in java 第四版读书笔记 第一章对象导论
- Java 线程第三版 第三章数据同步 读书笔记
- 读书笔记,《Java 8实战》,第三章,Lambda表达式
- Thinking in Java第三版读书笔记-第三章:流程控制
- Thinking in Java 读书笔记 第三章 运算符
- 读书笔记_java设计模式深入研究 第三章 工厂模式 Factory
- Thinking in Java 第四版完整版 第三章练习题
- 读书笔记 Think in Java 4th 第三章 操作符
- Thinking In Java 第四版读书笔记
- 深入理解Java 虚拟机读书笔记--第三章 垃圾收集器与内存分配策略
- java容器(java编程思想第四版-读书笔记)
- Thinking in Java(第四版)习题--第三章