<分区>
如果我有这样一个列表:
static ArrayList<? extends A> list = new ArrayList<A>();
的意义何在?扩展 A
?这是否意味着我正在制作一个仅包含必须从 A 继承的子类的列表?
通常我是这样做的:
static ArrayList<A> list = new ArrayList<A>();
<分区>
如果我有这样一个列表:
static ArrayList<? extends A> list = new ArrayList<A>();
的意义何在?扩展 A
?这是否意味着我正在制作一个仅包含必须从 A 继承的子类的列表?
通常我是这样做的:
static ArrayList<A> list = new ArrayList<A>();
最佳答案
extends
关键字意味着该关键字左侧的类将使用右侧类中的所有方法和属性。 ?
不会在那里。一些名字会是。类的名称。
static ArrayList<? extends A> list = new ArrayList<A>();
在上面的代码中,您正在创建一个新的 ArrayList
对象,它使用(实现/扩展)类 A
作为其方法和属性,但实际上不是A
。
static ArrayList<A> list = new ArrayList<A>();
而在您通常使用的第二个代码中,您实际上是在创建一个真正使用类 A
的对象。
在 Java 中,我们称之为继承,其中一个类继承了另一个类的所有属性和功能。
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
关于java - "? extends A"的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23852841/