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

时间:2014-05-20 22:16:30

标签: java generics inheritance collections arraylist

比方说,我有

public class Foo<Game> extends ArrayList<Game>{

 }

我希望迭代它的元素。我知道我可以使用带迭代器的for循环。但尝试类似的事情:

for(Game g : super)

似乎不起作用。这是神秘的(至少对我而言)因为super是对ArrayList<Game>类型的对象的引用,它应该能够被迭代。是否有一些我缺少的语法?

编辑:我将Foo类型添加到类声明中。

1 个答案:

答案 0 :(得分:5)

  

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

super 不是一个对象。如果您实例化一个继承自另一个类的类,则不会获得两个对象(thissuper),只有一个实例。 (哎呀,深度继承层次结构变得笨拙!)super允许你从超级(再次,不是一个对象)访问方法在方法实现中使用它们。这些super方法仍然在this对象的上下文中执行,但现在该对象属于子类类型。但这完全没问题,而且它是多态性的基础之一。

this是一个对象:它是Foo的一个实例,因为Foo继承自ArrayList<Game>,它也是ArrayList<Game>,因此实现{ {1}}。因此,您可以迭代Iterable<Game>

因此,您正在寻找:

this