gpt4 book ai didi

java - ArrayList 中的子类方法调用问题

转载 作者:行者123 更新时间:2023-12-01 15:08:43 26 4
gpt4 key购买 nike

我有一个实体数组列表。实体类有

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 调用打印函数。我现在有点迷失了。

最佳答案

由于您有多个关卡类,因此您必须确保 Player.update() 方法签名引用正确的类(以便成功覆盖):

public class Player {

@Override
public void update(int delta, game.level.Level level, ArrayList<Entity> entities) { ... }
}

关于java - ArrayList<Superclass> 中的子类方法调用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12608104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com