比如说,我有
public class Foo<Game> extends ArrayList<Game>{
}
我想迭代它的元素。我知道我可以使用 for 循环及其迭代器。但尝试类似的事情:
for(Game g : super)
似乎不起作用。这很神秘(至少对我来说),因为 super 是对 ArrayList<Game>
类型的对象的引用。应该能够迭代。我是否缺少一些语法?
编辑:我将 Foo 类型添加到类声明中。
最佳答案
This is mysterious(at least to me) because super is a reference to an object of type
ArrayList<Game>
[...]
super
不是一个对象。如果实例化一个从另一个类继承的类,则不会获得两个对象( this
和 super
),而只有一个实例。 (哎呀,由于继承层次结构很深,它会变得笨拙!) super
允许您从 super 类(同样,不是对象)访问方法并在方法实现中使用它们。那些super
方法仍然在 this
的上下文中执行对象,但现在该对象是子类类型。不过这完全没问题,而且它是多态性的基础之一。
this
是一个对象:它是 Foo
的实例并且,因为 Foo
继承自ArrayList<Game>
,它也是一个ArrayList<Game>
从而实现Iterable<Game>
。因此,您可以迭代 this
.
因此,您正在寻找:
for (Game g : this) { ... }
关于java - 如果我有 ArrayList 的子类,我可以在不调用 super.iterator() 的情况下迭代其元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23770886/