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)