在阅读 JDK 源码的时候,发现了很多子类在父类已经实现了某一接口的情况下,依旧选择去实现这一接口。有没有大佬能解释一下这么做的原因?是为了提升代码可读性吗?随文附上LinkedHashMap
的例子:
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>
{ // 省略实现 }
上面代码中,LinkedHashMap
和HashMap
都实现了Map
接口。
1
AoEiuV020CN 2023-01-09 12:13:44 +08:00 1
确实没啥用,我猜只是强调一下吧,
总不能是复制粘贴不小心加上去就懒得删除了吧, |
2
chendy 2023-01-09 13:29:40 +08:00 1
提高可读性,强调一下自己实现了某某接口
没有啥别的效果 |
3
lucasji OP @AoEiuV020CN 这么看来确实是为了提高可读性,因为不仅是 JDK ,Spring 的源码里面也有这种写法。
|
4
zjp 2023-01-09 13:56:04 +08:00 via Android 1
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 的很多方法,文档几乎没有区别 |
5
dqzcwxb 2023-01-09 14:12:50 +08:00
可以保证父类实现方法变更的情况下,子类不会受到影响
|
6
nielinjie 2023-01-09 14:30:08 +08:00 2
是否继承父类,远没有是否实现一个接口重要。所以尽量随时随地写明是否实现一个接口。
请参照我以前的一个回答。 接口和抽象类在实际应用中如何选择? - 聂同学的回答 - 知乎 https://www.zhihu.com/question/314514470/answer/626587005 |
7
fang23 2023-01-09 14:53:58 +08:00
帮顶,以前想过这个问题,但是没找到答案
|
8
xiang0818 2023-01-09 15:46:41 +08:00 1
|
9
lookStupiToForce 2023-01-09 16:43:31 +08:00 1
个人感觉是对现阶段 [码代码工具] 的一种妥协
当你一个子类继承了 N 多个基类(多继承)/一个子类有 N 层继承(多重继承)的时候,你就知道重新声明一遍是多么明智的选择了 就跟 python 里强调不要使用 from package import * 类似 如果这样用,则很可能每次你找个名称的出处都要找半天它到底出自哪个包,还要检查有没有重复声明 /定义🤣 |
10
SACKJJKLL 2023-01-09 20:28:19 +08:00
我一直以为是什么高级写法,现在看来这是一种无意义的做法👀
|