パラメトリック ポリモーフィズムについて質問があります。子型が混在するコレクションがある場合、実際の型を特定してキャストを回避するにはどうすればよいですか。例えば
class Animal{
}
class Bird extends Animal{
void fly(){}
}
class Dog extends Animal{
void bark(){}
}
ArrayList<Animal> list = new ArrayList<Animal>();
問題は、Animal コレクションを繰り返し処理するときに、どれがどれであるかをどのように知るかです。実際の型を毎回確認するために instanceof を使用する必要がありますか?
for(Animal animal : list){
if(animal instanceof Dog){
((Dog) animal).bark();
}
else ((Bird) animal).fly();
}