java - 如果我有 ArrayList 的子类,我可以在不调用 super.iterator() 的情况下迭代其元素吗?

标签 java generics inheritance collections arraylist

比如说,我有

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不是一个对象。如果实例化一个从另一个类继承的类,则不会获得两个对象( thissuper ),而只有一个实例。 (哎呀,由于继承层次结构很深,它会变得笨拙!) 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/

相关文章:

c++ - 除了使用纯虚拟之外,如何通过基类从派生类获取成员

c# - 从具有参数的 'Form' 继承

父返回子中的 C++ 函数

java - 使用 JNDI 和最小密码年龄在 AD 中创建用户帐户

java - 代码在 Eclipse 中有效,但在命令行中无效

c# - 在 C# : How to ensure methods in the base class return the derived class's type? 的基类中使用泛型

c# - 不能同时指定约束类和 0​​x104567910 或 'class' 约束

java - 从抽象产品列表中提取具体产品的子列表

java - PHP:SoapClient 构造函数非常慢(需要 3 分钟)

java - Jersey maven-wadl-plugin 无法解析 HttpServletRequest