纯继承与扩展

发布时间:2016-12-9 6:38:50 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"纯继承与扩展",主要涉及到纯继承与扩展方面的内容,对于纯继承与扩展感兴趣的同学可以参考一下。

在学习继承时,采取某种“纯粹”的方式来创建继承层次结构似乎是最清楚易懂的方法了。也 就是说,只有在基类或接口中已经建立的方法才可以在导出类中被重载. 之所以被称作是纯粹的“is-a”(是一种)关系,是因为一个类的接口已经确定了它应该是什 么。继承可以确保所有的导出类具有基类的所有接口,且绝对不会少。按上图那么做,导 出类只是具有和基类一样的接口。   也可以认为这是一种纯替代,因为导出类可以完全地代替基类,那在我们使用时,就永远 不需要知道关于子类的任何额外信息了。 也就是说,基类可以接受我们发送给导出类的任何消息,因为二者有着完全相同的接口。 我们只需从导出类向上转型,永远不需知道正在处理的对象的确切类型。所有这一切,都 是通过多态进行处理的。   按这种方式考虑,似乎只有纯粹的 is-a 关系才是唯一明智的做法。 所有其他的设计都只会 导致混乱,当然也就错误百出。这仍是一个陷阱,因为一旦我们深入研究,就会改变主意, 并发现扩展接口(遗憾的是,extends 关键字似乎在怂恿我们这样做)才是解决特定问题 的完美方案。可将其定义为“is-like-a”(像一个)关系,因为导出类就像是一个基类—— 它有着相同的基本接口——但是它还具有由额外方法实现的其他特性。 虽然这是一种有用且明智的方法(视情况而定),但是它也有缺点。导出类中扩展的接口 不能被基类访问,因此,一旦我们向上转型,就不能调用那些新增方法: 在这种情况下,如果我们不进行向上转型,这样的问题也就不会出现。但是通常情况下, 我们需要重新查明对象的确切类型,以便能够访问该类型所扩充的方法。随后的一节将展 示该具体怎么做。  

上一篇:使用cygwin在windows上模拟unix环境,解决不能显示中文的问题
下一篇:First Missing Positive

相关文章

关键词: 纯继承与扩展

相关评论