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