由于想研究下接口技术,就看了下LinkedList的源码,发现了个不解的问题
现在在网吧没工具画图,我就随便说下,大家有条件的参考下j2se的API对照下
LinkedList extends AbstractSequentialList implements List ...

AbstractSequentialList extends AbstractList

AbstractList extends AbstractCollection implements List问题出现在这了
既然 LinkedList --> AbstractSequentialList --> AbstractList --> List
为什么 LinkedList  又要再去实现 List接口呢?
有点感觉多此一举啊。不理解。。假设LinkedList 如此定义
public class LinkedList<E>
       extends AbstractSequentialList<E>
       implements  Deque<E>, Cloneable, Serializable  /**源码中多了个List*/
我们在使用的时候照样可以
List list = new LinkedList();
为什么sun要重复实现List?期待高人指点

解决方案 »

  1.   

    接口的意义就是说实现它的类都得有我的这些个方法。 List有很多呀,arrayList, LinkedList等等,这些list都拥有一些共同的方法,因而抽象出了一个接口,以方便未来List的更进一步的扩充,当然,这样做也规范许多。因为规定好了,你要是个List,就得有这些方法。 
      

  2.   

    这么做从语法意义上来说纯属多此一举,但从文档的可读性来看我感觉有点必要。LinkedList 作为 List 的一个最终实现类,再次重申强调一下 List 就可以在 javadoc 文档中更为清晰地表明
    这个类是 List 的实现类,而不用去翻其父类的继承链才知道这是一个 List 的实现类。这样做以我看来就是重申强调一下,至于其他的也没有什么意义了。
      

  3.   

    其实我认为 Java 类库开发人员的目的是为了让使用者更多地关注 List 而不是去关注于
    AbstractSequentialList, AbstractList 这些抽象父类。
      

  4.   

    我觉得类库开发人员的目的已经达到了,如果不是看到你这个帖子,我根本就没注意到还有 AbstractSequentialList 这个类的,呵呵。
      

  5.   

    这点赞同,感觉AbstractSequentialList等类纯粹关键还是内部需要,并不想提供给用户。
      

  6.   

    其实也不尽是这样,大家可以从系统耦合性来考虑:
    如果一个系统存在以下的调用
    public void getInfos(ArrayList list){
    //....
    }
    如果以后,觉得用LinkedList比用ArrayList有更高的效率,那么我们就要去修改这个接口为
    public void getInfos(LinkedList list){
    //....
    }
    一来这样要经常去修改调用的源代码,而且也会造成维护的困难,但如果我们的方法是这样定义的:
    public void getInfos(List list){
    //...
    }
    这样我们就可以用传各样的List去调用,也不用修改代码。
    “依据接口编程,而不是实现编程”是面向对象的重要原则,不然我们开发的系统,就会遇到维护上的难题