ArrayList.java中List接口的冗余实现

13 java collections

可能重复:
为什么ArrayList有"实现列表"?

我是java新手我试图看到集合界面的层次结构.我发现AbstractList.java的签名 就像

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
Run Code Online (Sandbox Code Playgroud)

它实现了List接口.但是,如果你看看子类ArrayList.java的签名,它看起来像

public class ArrayList<E> extends AbstractList<E>   implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Run Code Online (Sandbox Code Playgroud)

如果你看父类已经实现了List接口那么为什么子类再次实现相同的接口(List).

这背后是否有具体的原因或要求

NPE*_*NPE 8

这背后是否有具体的原因或要求

我不这么认为.List<E>就编译器而言,删除第二个将完全没有改变.

我的两个假设是:

  1. 这是出于历史原因.但是,我找不到任何证据支持这一点.
  2. 它包含在出于文档目的,使其立即明确而不是ArrayList<E> is-a List<E>(这可能是最重要的事情ArrayList).