我有一个实体数组列表。实体类有
public void update(int delta, Level level, ArrayList<Entity> entities){
//do stuff
}
实体的子类 Player,具有覆盖它的函数
public void update(int delta, Level level, ArrayList<Entity> entities){
//do player specific stuff
super.update(delta, level, entities);
}
当我从实体数组列表中调用播放器对象更新函数时,如下所示:
for(Entity entity : entities) //contains an object of Player
entity.update(delta, level, entities);
它直接调用实体函数并且玩家特定的东西不会发生,但是如果我这样称呼它:
((Player)entities.get(0)).update(delta, level, entities);
确实如此。我以为我理解了这个问题,但我尝试了以下代码
private static class Foo{
public void print(){
System.out.println("I AM FOO");
}
}
private static class Bar extends Foo{
public void print(){
System.out.println("i am bar");
super.print();
}
}
public static void main(String[] args){
ArrayList<Foo> foos = new ArrayList<Foo>();
foos.add(new Foo());
foos.add(new Bar());
for(Foo leFoo: foos)
leFoo.print();
}
当对象是 bar 时,它实际上从 Bar 调用 print 函数。在这一点上我有点迷路了。