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

Java 如果我有ArrayList的子类,我可以在不调用super.iterator()的情况下迭代它的元素吗?,java,generics,inheritance,collections,arraylist,Java,Generics,Inheritance,Collections,Arraylist,比如说,我有 public class Foo<Game> extends ArrayList<Game>{ } 似乎不起作用。这很神秘(至少对我来说),因为super是对ArrayList类型的对象的引用,应该能够对其进行迭代。有没有我遗漏的语法 编辑:我将Foo类型添加到类声明中 这很神秘(至少对我来说),因为super是对类型为ArrayList[…]的对象的引用 super不是对象。如果实例化从另一个类继承的类,则不会得到两个对象(this和super),只

比如说,我有

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

 }
似乎不起作用。这很神秘(至少对我来说),因为super是对
ArrayList
类型的对象的引用,应该能够对其进行迭代。有没有我遗漏的语法

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

这很神秘(至少对我来说),因为super是对类型为
ArrayList
[…]的对象的引用

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

这是一个对象:它是
Foo
的一个实例,因为
Foo
继承自
ArrayList
,它也是一个
ArrayList
,因此实现了
Iterable
。因此,您只需在
上迭代此

因此,您正在寻找:

for (Game g : this) { ... }
这很神秘(至少对我来说),因为super是对类型为
ArrayList
[…]的对象的引用

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

这是一个对象:它是
Foo
的一个实例,因为
Foo
继承自
ArrayList
,它也是一个
ArrayList
,因此实现了
Iterable
。因此,您只需在
上迭代此

因此,您正在寻找:

for (Game g : this) { ... }

你为什么用
super
而不是
this
。不过一般建议-在这个类中,
游戏
是一个类型参数;但你让它看起来像一种类型。通常的约定是对类型参数使用一个大写字母。必要时,使用字母和数字(
T1,T2
),但不要使用整个单词。否则,人们在查看您的代码时会感到非常困惑,然后期望有一个名为
Game
的类,如果真的有一个名为
Game
的类,则会更加困惑。我只想将
Game
对象存储在此arraylist中,因此我将其设置为Foo。不,按照您使用它的方式,它是一个类型参数,您将
Foo
设置为泛型。如果您希望它始终是这个东西存储的
游戏
对象,那么就将其声明为
公共类Foo extensed ArrayList
——否则您会在这条路上感到非常困惑。这样,您还可以在
Foo
中使用
Game
类的方法。事实上,我根本不会继承
ArrayList
。在大多数情况下,我想你会发现让
Foo
有一个类型为
ArrayList
的字段比让它成为
ArrayList
要容易得多。你为什么用
super
而不是
this
。不过一般建议-在这个类中,
游戏
是一个类型参数;但你让它看起来像一种类型。通常的约定是对类型参数使用一个大写字母。必要时,使用字母和数字(
T1,T2
),但不要使用整个单词。否则,人们在查看您的代码时会感到非常困惑,然后期望有一个名为
Game
的类,如果真的有一个名为
Game
的类,则会更加困惑。我只想将
Game
对象存储在此arraylist中,因此我将其设置为Foo。不,按照您使用它的方式,它是一个类型参数,您将
Foo
设置为泛型。如果您希望它始终是这个东西存储的
游戏
对象,那么就将其声明为
公共类Foo extensed ArrayList
——否则您会在这条路上感到非常困惑。这样,您还可以在
Foo
中使用
Game
类的方法。事实上,我根本不会继承
ArrayList
。在大多数情况下,我想你会发现让
Foo
有一个
ArrayList
类型的字段比让它成为
ArrayList
要容易得多。另一种想法是
super
有助于识别方法,不是一个对象——不管它的外观如何。另一种看待它的方式是,
super
帮助识别一个方法,而不是一个对象——不管它的外观如何。