のメソッドにアクセスする方法をこんにちは私の問題に簡単な解決策がある場合、私は、のArrayList - サブクラス
を思ったんだけど、私はArrayList
を持っている:
ArrayList <Animal> animalList = new ArrayList<Animal>();
/* I add some objects from subclasses of Animal */
animalList.add(new Reptile());
animalList.add(new Bird());
animalList.add(new Amphibian());
これらはすべてmove()
のメソッドを実装しています。は、move()
が呼び出されたときに飛んでいます。 は、私は大丈夫です。この
public void feed(Integer animalIndex) {
Animal aAnimal = (Animal) this.animalList.get(animalIndex);
aAnimal.eat();
}
を使用して一般的な方法とスーパークラスのプロパティにアクセスすることができます知っている - しかし、今私は、サブクラスBird
がありmove()
メソッドにアクセスしたいと思います。 私はキャストしてこれを行うことができますAnimal
Bird
として:私の状況で
Bird aBird = (Bird) this.animalList.get(animalIndex);
aBird.move();
私はそれが意味するように私は、各サブタイプのために上記のコード1の3つの異なるセットを持って、これを行うにはしたくありませんAnimal
。
少し冗長であるようですが、より良い方法がありますか?あなたのケースでは
はなぜ動物を使用すると、サブクラスでオーバーライドし '移動()'メソッドを持っているでしょうか? –
...コールを移動しますか?サブクラスの実装が呼び出されていない場合は、わからないことがあります。 –
@ user2278797ちょうどあなたが知っていることは、あなたの質問を編集してより良い書式設定をし、クラスの名前を変更したことです(コードに矛盾していた):追加した行の名前から 's'-esを削除しました'animalList'。彼らは次のとおりでした: 'animalList.add(新しい爬虫類());動物リストadd(新しい鳥()); animalList.add(新しい両生類()); 'そして、今は:' animalList.add(new Reptile()); animalList.add(new Bird()); animalList.add(新しい両生類()); '。あなたのコードでそれらを使用した場合は、それに応じて変更するか、質問のコードを再編集してください。 – acdcjunior