接口继承接口的意义

08月04日 收藏 0 评论 6 java开发

接口继承接口的意义

转载声明:文章来源https://blog.csdn.net/shunzi1046/article/details/52456594

首先说说接口
接口是一种高度的抽象,里面会规定一些将要实现的行为或者只作为一种标记,如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的集合框架,通过接口继承可以称得上是一种良好的设计。

C 6条回复 评论
旺仔扣扣新

把简单题目想复杂了

发表于 2024-04-08 21:00:00
0 0
如如

感谢前辈

发表于 2023-12-04 22:00:00
0 0
李子寒

学习接口测试的朋友可以使用国产的接口测试工具apipost,简单易学是一款很容易上手的接口测试工具

发表于 2022-02-04 22:00:00
0 0
卡卡卡

刚接触Spring框架,一个Method method直接把我看晕了

发表于 2021-09-12 15:55:00
0 0
半个朋友

UI这个行当水很深啊,因为不能明显看出美术功底,混子太多了。。

发表于 2021-09-11 17:20:00
0 0
杜行知

哎呀,我居然把他看完了,谢谢大佬的文章

发表于 2021-09-10 21:10:00
0 0