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
帮助识别一个方法,而不是一个对象——不管它的外观如何。