为什么 List 接口扩展集合接口?

2022-09-02 11:21:15

“集合”接口具有多种方法。“列表”接口扩展了“集合”接口。它声明与集合接口相同的方法?为什么会这样?

例如

interface Collection extends Iterable
{
     public abstract int size();
 public abstract boolean isEmpty();
 public abstract boolean contains(java.lang.Object);
 public abstract java.util.Iterator<E> iterator();
 public abstract java.lang.Object[] toArray();
 public abstract <T extends java/lang/Object> T[] toArray(T[]);
 public abstract boolean add(E);
 public abstract boolean remove(java.lang.Object);
 public abstract boolean containsAll(java.util.Collection<?>);
 public abstract boolean addAll(java.util.Collection<? extends E>);
 public abstract boolean removeAll(java.util.Collection<?>);
 public abstract boolean retainAll(java.util.Collection<?>);
 public abstract void clear();
 public abstract boolean equals(java.lang.Object);
 public abstract int hashCode();
}

相同的方法也存在于列表界面中:

public interface List extends Collection
{
 public abstract int size();
 public abstract boolean isEmpty();
 public abstract boolean contains(java.lang.Object);
 public abstract java.util.Iterator<E> iterator();
 public abstract java.lang.Object[] toArray();
 public abstract <T extends java/lang/Object> T[] toArray(T[]);
 public abstract boolean add(E);
 public abstract boolean remove(java.lang.Object);
 public abstract boolean containsAll(java.util.Collection<?>);
 public abstract boolean addAll(java.util.Collection<? extends E>);
 public abstract boolean removeAll(java.util.Collection<?>);
 public abstract boolean retainAll(java.util.Collection<?>);
 public abstract void clear();
 public abstract boolean equals(java.lang.Object);
 public abstract int hashCode();
}

如果这些方法已经在扩展集合接口,是否需要在 List 中再次编写这些方法?


答案 1

它们被重新编写,以便可以记录它们,以便指定列表如何与集合接口中指定的协定相比优化这些方法的协定。

例如,记录 中的方法以指定将元素添加到列表的末尾。这不能在“集合”中指定,因为“集合”没有开始和结束。add()List


答案 2

JavaDoc 和 API 协定会随着继承层次结构的向下移动而发生一些变化/或变得更加具体。

List重新声明了这些方法,并赋予它们更具体的JavaDoc。


推荐