如果我有一个ArrayList的子类,我可以迭代它的元素而不调用super.iterator()吗?

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类型.

Mat*_*ens 5

这是神秘的(至少对我而言)因为super是对ArrayList<Game>[...] 类型对象的引用

super不是一个对象.如果您实例化一个继承自另一个类的类,则不会获得两个对象(thissuper),只有一个实例.(哎呀,深度继承层次结构变得super难以处理!)允许您从超(同样不是对象)访问方法,并在方法实现中使用它们.这些super方法仍然在this对象的上下文中执行,但现在该对象属于子类类型.虽然这很好,但它是多态性的基础之一.

this是一个对象:它是Foo和的一个实例,因为它Foo继承自ArrayList<Game>ArrayList<Game>,因此也是一个实现Iterable<Game>.因此,你可以迭代this.

因此,您正在寻找:

for (Game g : this) { ... }
Run Code Online (Sandbox Code Playgroud)