• Vector既然继承了AbstractList为啥还要实现List接口


    类似的问题:

    ArrayList继承了AbstractList为何还要实现List接口?

    HashMap继承了AbstractMap为何还要实现Map接口?

    HashSet继承了AbstractSet为何还要实现Set接口?

    今天无意中看到Vector的源码,发现Vector继承了AbstractList(抽象类,implement了List接口),同时Vector实现了List接口。代码如下

    public class Vector
    extends AbstractList
    implements List, RandomAccess, 
    Cloneable, java.io.Serializable

    想了好久都没想明白为什么要这么做?问了几个同事,也没有好的解释。

    于是,上网搜索,有说是因为classs.getinterfaces()会返回不同的结果的,有说是为了可阅读的,也有说为了以后可维护性的。。。但是想想这些解释都不那么让人性福。

    终于,在StackOverflow上找到了答案:it was a mistake。只是当初JDK的作者犯的一个错,他当时以为这样会有用。

    详情:<a href="http://stackoverflow.com/questions/2165204/why-does-linkedhashsete-extend-hashsete-and-implement-sete">http://stackoverflow.com/questions/2165204/why-does-linkedhashsete-extend-hashsete-and-implement-sete</a>

    其中第一个回复,是来自google的员工Kevin Bourrillion,他自称问过java collection的作者Josh,并且得到了上述答案。

    呵呵,这个问题的最终答案确实很有意思。

    扩展问题:

    Hashtable为什么继承了Dictionary并且实现了Map接口?但是Dictionary却没有实现Map接口?

    答案是因为在java1.2之前,是没有Map接口的,只有Hashtable,后来在1.2中,引入java collection之后,重写了Hashtable,让其实现Map接口。

    这也就是为什么JDK的源码中会存在不一致的代码风格的原因,一句话,历史原因。O(∩_∩)O~

  • 相关阅读:
    mybatis 查询一对多子表只能查出一条数据
    Docker 查看容器里Log4写的日 志文 件里的日志
    MYSQL之union的使用
    【前端开发】常见好用的流程图框架
    【推荐】好网站推荐
    【前端工具】好用的数据库工具Navicat
    jQuery ajax
    thinkphp6.0封装数据库及缓存模型
    Unity 3D使用C#脚本实例
    Unity 3D简单使用C#脚本,脚本的执行顺序
  • 原文地址:https://www.cnblogs.com/gaojing/p/2844946.html
Copyright © 2020-2023  润新知