接口继承接口的意义

首先说说接口,接口是一种高度的抽象,里面会规定一些将要实现的行为或者只作为一种标记,如java中的Serializable接口,它比抽象类更加抽象。然后说说一说对继承的理解,继承就是泛化。在由接口组成的继承层级中,从上往下看,是由抽象到具体的过程。通过继承我们可以保留父接口中定义的行为,同时对其可以做扩展。整个继承层级,其实是类似树结构的,树的层级越深,行为就更越复杂,能做的事情就更多。上一层是对下一层共性的抽象,下层是对上层不同维度的演进。以java的集合框架为例,如下图:

最开始只有一个Iterable,这里只是要返回一个迭代器,它可以用来处理一些可以迭代的对象,可以在foreach或者while循环中迭代。那么那些对象是可以迭代的呢,也就有了第二层接口,Collection、DirectoryStream(JDK1.7中新增nio模块中)都是可迭代的。接下来再往深层考虑,
什么样的算是Collection,JDK中给出定义Collection代表一组对象,称之为元素,有些集合允许重复元素,有些不允许,有些有序有些无序。原文中这样描述:

A collection represents a groupof objects, known as its elements. Some collections allow duplicate elementsand others do not. Some are ordered and others unordered.

根据这些描述于是又有了下一层,Set、List、Queue,这是针对Collection中不同类型的集合的抽象定义,其内部声明的方法如下:

以及

我们发现有很多不同的方法,这个就是对Collection不同维度的演进。职责不断的细化,对于其它的接口,情况是一样的。这点和画家在创作时先画出轮廓,然后再一点一点的勾勒细节有异曲同工之妙。
对于提出的问题,接口继承有什么意义?不妨这样考虑,假如没有接口继承,会变成什么样?假如不让接口继承,那么所有接口中的方法都放到一个接口中,这是只有一个接口,那么这个接口
规定的行为不觉得有点太多了么,既要负责返回一个迭代器,可以用来迭代,又要是一个集合,而且既要定义有序集合的行为,又要定义无序集合的行为,既要定义有重复元素的集合的行为,又要定义无重复元素的集合,假设只有一个方法来定义集合的行为,请为这个方法该怎么实现。千万不要说加上一大堆if else 的判断语句,如果这时候有新的集合类型加入了,难道再加一个if else语句么?无疑这是一种糟烂的设计。反观通过接口继承产生的层级接口,层次分析,职责分明,Set就是Set,List就是List,想要实现那种结构直接实现对应的接口即可。换个角度看,通过接口继承,可以重新定义上层已经定义的行为,也不会影响到同一层级的其他接口中的行为。
在简单的系统中,当然并不一定用到接口继承,但一个相对复杂的系统中,如JDK的集合框架,通过接口继承可以称得上是一种良好的设计。

  • 12
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值