エンティティの配列リストがあります。Entityクラスには
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からprint関数を呼び出します。この時点で私はちょっと迷っています。