【发布时间】:2020-04-05 10:17:00
【问题描述】:
我正在学习java中的泛型。起初我们制作了一个整数数组列表,我们在列表中添加了一个值。
import java.util.ArrayList;
import java.util.List;
public class GenericsRunner {
public static void main(String[] args) {
ArrayList<Integer> numbers=new ArrayList<>();
numbers.add(1);
}
static <X extends List> void duplicate(X list) {
list.addAll(list);
}
}
方法副本只能由扩展List 的对象使用。但是,由于List 是接口
public interface List<E> extends Collection<E>
而ArrayList 正在实现List
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable,
java.io.Serializable
我在这一点上卡住了。 Extends 由那些从超类继承属性的类使用。
但是Arraylist 是如何扩展List 的呢?实际上ArrayList 正在实现List。这个 extends 关键字如何为这个实现机制工作?我很困惑它使用extends 和implements 是一样的吗?
【问题讨论】:
-
您是否注意到它是
extends AbstractList而不是extends List? -
是的,但它也在执行列表?
-
是的,这可能只是做了多余的声明,但是
AbstractList已经实现了List,所以List<E>在某种意义上可以从implements接口中删除。