关于子类和父类同时实现某一接口的疑惑

2023-01-09 11:53:30 +08:00
 lucasji

在阅读 JDK 源码的时候,发现了很多子类在父类已经实现了某一接口的情况下,依旧选择去实现这一接口。有没有大佬能解释一下这么做的原因?是为了提升代码可读性吗?随文附上LinkedHashMap的例子:

public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>
{ // 省略实现 }

上面代码中,LinkedHashMapHashMap都实现了Map接口。

1818 次点击
所在节点    Java
10 条回复
AoEiuV020CN
2023-01-09 12:13:44 +08:00
确实没啥用,我猜只是强调一下吧,
总不能是复制粘贴不小心加上去就懒得删除了吧,
chendy
2023-01-09 13:29:40 +08:00
提高可读性,强调一下自己实现了某某接口
没有啥别的效果
lucasji
2023-01-09 13:43:06 +08:00
@AoEiuV020CN 这么看来确实是为了提高可读性,因为不仅是 JDK ,Spring 的源码里面也有这种写法。
zjp
2023-01-09 13:56:04 +08:00
https://stackoverflow.com/a/18558649
My understanding is that they did so for documentation purposes: the authors wanted to show that ArrayList<E> is primarily a List<E>; the fact that ArrayList<E> extends AbstractList<E> is a less significant detail of its implementation.

类似的还有 List 重新声明了 Collection 的很多方法,文档几乎没有区别
dqzcwxb
2023-01-09 14:12:50 +08:00
可以保证父类实现方法变更的情况下,子类不会受到影响
nielinjie
2023-01-09 14:30:08 +08:00
是否继承父类,远没有是否实现一个接口重要。所以尽量随时随地写明是否实现一个接口。
请参照我以前的一个回答。

接口和抽象类在实际应用中如何选择? - 聂同学的回答 - 知乎
https://www.zhihu.com/question/314514470/answer/626587005
fang23
2023-01-09 14:53:58 +08:00
帮顶,以前想过这个问题,但是没找到答案
xiang0818
2023-01-09 15:46:41 +08:00
lookStupiToForce
2023-01-09 16:43:31 +08:00
个人感觉是对现阶段 [码代码工具] 的一种妥协

当你一个子类继承了 N 多个基类(多继承)/一个子类有 N 层继承(多重继承)的时候,你就知道重新声明一遍是多么明智的选择了
就跟 python 里强调不要使用 from package import * 类似
如果这样用,则很可能每次你找个名称的出处都要找半天它到底出自哪个包,还要检查有没有重复声明 /定义🤣
SACKJJKLL
2023-01-09 20:28:19 +08:00
我一直以为是什么高级写法,现在看来这是一种无意义的做法👀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907555

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX