Java 程序设计语言(第四版)读书笔记 第三章 类的扩展


只要稍微有点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接口则是为扩展该类的程序员提供的。
这两类接口都是真正的契约,应当精心设计。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值