Vector既然继承了AbstractList为啥还要实现List接口
2012-09-06 10:09
501 查看
类似的问题:
ArrayList继承了AbstractList为何还要实现List接口?
HashMap继承了AbstractMap为何还要实现Map接口?
HashSet继承了AbstractSet为何还要实现Set接口?
今天无意中看到Vector的源码,发现Vector继承了AbstractList(抽象类,implement了List接口),同时Vector实现了List接口。代码如下
想了好久都没想明白为什么要这么做?问了几个同事,也没有好的解释。
于是,上网搜索,有说是因为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~
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~
相关文章推荐
- Vector既然继承了AbstractList为啥还要实现List接口
- ArrayList既然继承自AbstractList抽象类,而AbstractList已经实现了List接口,那么ArrayList类为何还要再实现List接口呢?
- ArrayList既然继承自AbstractList抽象类,而AbstractList已经实现了List接口,那么ArrayList类为何还要再实现List接口呢?
- ArrayList既然继承自AbstractList抽象类,而AbstractList已经实现了List接口,那么ArrayList类为何还要再实现List接口呢?
- Vector既然继承了AbstractList为啥还要实现List接口
- java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
- List接口实现类-ArrayList、Vector、LinkedList集合深入学习以及源码解析
- List接口实现类ArrayList、Vector、LinkedList的区别?HashMap和Hashtable区别?
- List接口的实现类---ArrayList、LinkedList、Vector之间的区别--------(java复习)
- java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
- java-面向对象之继承(感言:经过第一天和Java中类的继承和接口的实现的接触,自己需要学习的还很多,还要从基础抓起,尽管有点迷糊,但学到很多很喜欢这种时光!加油!)下面是查到的相关资料以备查看。
- A:LinkedList实现了List接口; B: AbstractSet实现了Set接口; C: HashSet继承自AbstractSet基类; D: WeakMap继承自 AbstractMap
- Java集合源码学习(6)_List接口的实现_ArrayList_Vector
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
- A:LinkedList实现了List接口; B: AbstractSet实现了Set接口; C: HashSet继承自AbstractSet基类; D: WeakMap继承自 AbstractMap
- HashMap既然继承了AbstractMap为什么还要实现Map
- 为什么在集合框架中已经继承了抽象类还要实现接口
- Java集合源码学习(5)_List接口的基础实现AbstractList
- List接口实现类-ArrayList、Vector、LinkedList集合深入学习以及源代码解析