首页 > 解决方案 > Javadoc 中的 Java ArrayList 定义

问题描述

我正在尝试深入研究 Java Collection 层次结构的主题,并且在阅读https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html之后有点困惑 在 方法摘要表之后注意:从类 java.util.AbstractCollection 继承的方法有:containsAll、toString

从接口 java.util.List 继承的方法: containsAll、equals、hashCode 因此,ArrayList 从两个“源”继承 containsAll。我有两个问题:

  1. 如何从不同的“来源”继承相同的方法?使用哪一种?
  2. 一个类如何从接口继承?类只是实现一个接口。

这是 ArrayList 的声明 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable

标签: javaarraylist

解决方案


对于一个通用示例,我们有一个接口 MyInterface、一个超类 SuperClass 和一个类 MyClass。

我的界面:

public interface MyInterface {
    public void functionA();
}

超类:

public class SuperClass {
    public void functionB() { ... }
    public void functionA() { ... }
}

我的课:

public class MyClass extends SuperClass implements MyInterface {
    public void functionC() { ... }
}

MyClass 扩展 SuperClass 的事实意味着 MyClass 继承了另外两个方法 functionB 和 functionA。等价于MyClass extends SuperClass

public class MyClass {
    public void functionB() { ... }
    public void functionA() { ... }
    public void functionC() { ... }
}

MyClass 实现 MyInterface 的事实意味着 MyClass 需要实现一个方法 functionA,该方法尊重 MyInterface 中定义的签名。希望 MyClass 实现这样的方法,因为它继承了 SuperClass。


ArrayList 的情况完全一样。ArrayList 实现了接口 List。所以ArrayList需要实现一个方法containAll()。希望 ArrayList 扩展了实现方法 containsAll() 的 AbstractCollection。所以 ArrayList 实际上是在实现一个方法 containsAll()


推荐阅读