Java编程思想 第四版(手码原书+菜鸟笔记) 第一章 1.6.1 “是一个”与“像是一个”关系

上一篇: 1.6 继承

文中笔记均为个人观点,如有错误请大家不吝指出,谢谢!
原书为《java编程思想 第四版 中文版》


1.6.1 “是一个”与“像是一个”关系

对于继承可能会引发某种争论:继承应该只覆盖基类的方法(而并不添加在基类中没有的新方法)吗?如果这样做,就意味着导出类和基础类是完全相同的类型,因为他们具有完全相同的接口。结果可以用一个导出类对象完全替代一个基类对象。这可以被视为纯粹替代,通常称之为替代原则。在某种意义上,这是一种处理继承的理想方式。我们经常将这种情况下的基础类与导出类之间的关系成为is-a(是一个)关系,因为可以说“一个圆就是一个几何形状”。判断是否继承,就是要确定是否可以用is-a来描述类之间的关系,并使之具有实际意义。

笔记:这里说的是 implements吗?实现(implements)需要将接口中所有接口覆盖重写。

有时必须在导出类型中添加新的接口元素,这样也就扩展了接口。这个新的类型仍然可以替代基类,但是这种替代并不完美,因为基类无法访问新添加的方法。这种情况我们可以描述为is-like-a(像是一个)关系。新类型具有旧类型的接口,但是他还包含其他方法,所以不能说它们完全相同。以空调为例,假设房子里已经布线安装好了所有的冷气设备的控制器,也就是说,房子具备了让你控制冷气设备的接口。想象一下,如果空调坏了,你用一个既能制冷又能制热的热力泵换了它,那么这个热力泵就像is-like-a空调,但是它可以做更多的事。因为房子的控制系统被设计为只能控制冷气设备,所以它只能和新对象中的制冷部分进行通信。尽管新对象的接口已经被扩展了,但是现有系统除了原来接口之外,对其他东西一无所知。继承3
当然,在看过这个设计之后,很显然会发现,制冷系统这个基类不够一般化,应该将其更名为“温度控制系统”,使其可以包括制热功能,这样我们就可以套用替代原则了。这张图说明了在真实世界中进行设计时可能会发生的使其。
当你看到替代原则时,很容易会认为这种方式(纯粹替代)是唯一可行的方式,而且事实上,用这种方式设计是很好地。但是你会时常发现,同样显然的是你必须在导出类的接口中添加新方法。只要仔细审视,两种方法的使用场合应该是相当明显的。

笔记:这个我理解的是extends,继承可以不用将父类的全部接口都在子类重写出来,用什么拿什么。extends关键字,更像是一个溺爱孩子的爸爸。
而implements更像是一个锻炼孩子独立能力的爸爸,因为要想implements父类,就必须将其所有方法重写。


笔记:借用百度查到的“继承与实现的区别”:“继承:如果多个类的某个部分的功能相同,那么可以抽象出一个类出来,把他们的相同部分都放到父类里,让他们都继承这个类。实现:如果多个类处理的目标是一样的,但是处理的方法方式不同,那么就定义一个接口,也就是一个标准,让他们的实现这个接口,各自实现自己具体的处理方法来处理那个目标”


文中会出现,如错字、语句不通、理解偏差等问题,请及时联系或在下方评论指出。我也会尽量按照原书将内容呈献给大家,谢谢!

下一篇: 1.7 伴随多态的可互换对象

猜你喜欢

转载自blog.csdn.net/w1293069091/article/details/82597727
今日推荐