Sar*_*abo 0 java generics collections inheritance arraylist
比方说,我有
public class Foo<Game> extends ArrayList<Game>{
}
Run Code Online (Sandbox Code Playgroud)
我想迭代它的元素.我知道我可以使用带迭代器的for循环.但尝试类似的东西:
for(Game g : super)
Run Code Online (Sandbox Code Playgroud)
似乎不起作用.这是神秘的(至少对我而言)因为super是对ArrayList<Game>
应该能够迭代的类型对象的引用.是否有一些我缺少的语法?
编辑:我在类声明中添加了Foo类型.
这是神秘的(至少对我而言)因为super是对
ArrayList<Game>
[...] 类型对象的引用
super
是不是一个对象.如果您实例化一个继承自另一个类的类,则不会获得两个对象(this
和super
),只有一个实例.(哎呀,深度继承层次结构变得super
难以处理!)允许您从超类(同样不是对象)访问方法,并在方法实现中使用它们.这些super
方法仍然在this
对象的上下文中执行,但现在该对象属于子类类型.虽然这很好,但它是多态性的基础之一.
this
是一个对象:它是Foo
和的一个实例,因为它Foo
继承自ArrayList<Game>
它ArrayList<Game>
,因此也是一个实现Iterable<Game>
.因此,你可以迭代this
.
因此,您正在寻找:
for (Game g : this) { ... }
Run Code Online (Sandbox Code Playgroud)