Animal というスーパークラスと、Cat、Dog、Bird というサブクラスがあるとします。
動物の配列を読み取り、meow() という猫固有のメソッドにアクセスしたい場合、どうすればよいですか?
getClass() を使用して Animal のサブクラスを見つけることができることはわかっていますが、meow() にアクセスするための参照を作成するにはどうすればよいですか?
Animal というスーパークラスと、Cat、Dog、Bird というサブクラスがあるとします。
動物の配列を読み取り、meow() という猫固有のメソッドにアクセスしたい場合、どうすればよいですか?
getClass() を使用して Animal のサブクラスを見つけることができることはわかっていますが、meow() にアクセスするための参照を作成するにはどうすればよいですか?
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()
}
}
にキャストできますCat
if (animal.getClass().getName().equals('Cat')) {
((Cat)animal).meow();
}
または、 を使用できますinstanceof
。
これらのソリューションはどちらも醜いものであり、Java はこのように使用するようには設計されていません。代わりに、内部的.speak
に呼び出すことができる動物用のメソッドを作成する必要があります。Cat.meow
このような ...
if (animal.getClass().getName().equals('Cat')) {
((Cat)animal).meow();
}
また
if (animal instanceof Cat) {
((Cat)animal).meow();
}
使用したいサブクラスを見つけたら、それをキャストできます。あなたの場合、それは
((Cat)animals[index]).meow();