V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
lucasji
V2EX  ›  Java

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

  •  
  •   lucasji · Jan 9, 2023 · 2574 views
    This topic created in 1212 days ago, the information mentioned may be changed or developed.

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

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

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

    10 replies    2023-01-09 20:28:19 +08:00
    AoEiuV020CN
        1
    AoEiuV020CN  
       Jan 9, 2023   ❤️ 1
    确实没啥用,我猜只是强调一下吧,
    总不能是复制粘贴不小心加上去就懒得删除了吧,
    chendy
        2
    chendy  
       Jan 9, 2023   ❤️ 1
    提高可读性,强调一下自己实现了某某接口
    没有啥别的效果
    lucasji
        3
    lucasji  
    OP
       Jan 9, 2023
    @AoEiuV020CN 这么看来确实是为了提高可读性,因为不仅是 JDK ,Spring 的源码里面也有这种写法。
    zjp
        4
    zjp  
       Jan 9, 2023 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 的很多方法,文档几乎没有区别
    dqzcwxb
        5
    dqzcwxb  
       Jan 9, 2023
    可以保证父类实现方法变更的情况下,子类不会受到影响
    nielinjie
        6
    nielinjie  
       Jan 9, 2023   ❤️ 2
    是否继承父类,远没有是否实现一个接口重要。所以尽量随时随地写明是否实现一个接口。
    请参照我以前的一个回答。

    接口和抽象类在实际应用中如何选择? - 聂同学的回答 - 知乎
    https://www.zhihu.com/question/314514470/answer/626587005
    fang23
        7
    fang23  
       Jan 9, 2023
    帮顶,以前想过这个问题,但是没找到答案
    xiang0818
        8
    xiang0818  
       Jan 9, 2023   ❤️ 1
    lookStupiToForce
        9
    lookStupiToForce  
       Jan 9, 2023   ❤️ 1
    个人感觉是对现阶段 [码代码工具] 的一种妥协

    当你一个子类继承了 N 多个基类(多继承)/一个子类有 N 层继承(多重继承)的时候,你就知道重新声明一遍是多么明智的选择了
    就跟 python 里强调不要使用 from package import * 类似
    如果这样用,则很可能每次你找个名称的出处都要找半天它到底出自哪个包,还要检查有没有重复声明 /定义🤣
    SACKJJKLL
        10
    SACKJJKLL  
       Jan 9, 2023
    我一直以为是什么高级写法,现在看来这是一种无意义的做法👀
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   985 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 23:17 · PVG 07:17 · LAX 16:17 · JFK 19:17
    ♥ Do have faith in what you're doing.