1

Animal というスーパークラスと、Cat、Dog、Bird というサブクラスがあるとします。

動物の配列を読み取り、meow() という猫固有のメソッドにアクセスしたい場合、どうすればよいですか?

getClass() を使用して Animal のサブクラスを見つけることができることはわかっていますが、meow() にアクセスするための参照を作成するにはどうすればよいですか?

4

4 に答える 4

2

s の配列を使用している場合は、animal操作しているオブジェクトがCatクラスのインスタンスであるかどうかを確認する必要があります。これは、instanceof演算子を使用して実現できます。次に、ダウンキャストAnimal演算子を使用してを aに変換し、メソッドCatを呼び出すことができます。meow()

if(animal instanceof Cat){
    (Cat)animal.meow()
}

配列で

Animal [] animals = [];
foreach(Animal animal: animals){
    //do something

    if(animal instanceof Cat){
        (Cat)animal.meow()
    }
}
于 2013-02-25T03:24:03.593 に答える
1

にキャストできますCat

if (animal.getClass().getName().equals('Cat')) {
    ((Cat)animal).meow();
}

または、 を使用できますinstanceof


これらのソリューションはどちらも醜いものであり、Java はこのように使用するようには設計されていません。代わりに、内部的.speakに呼び出すことができる動物用のメソッドを作成する必要があります。Cat.meow

于 2013-02-25T03:24:30.553 に答える
0

このような ...

if (animal.getClass().getName().equals('Cat')) {
    ((Cat)animal).meow();
}

また

if (animal instanceof Cat) {
    ((Cat)animal).meow();
}
于 2013-02-25T03:22:55.867 に答える
0

使用したいサブクラスを見つけたら、それをキャストできます。あなたの場合、それは

((Cat)animals[index]).meow();
于 2013-02-25T03:23:41.413 に答える