如果我有一个名为Animal的超类,以及名为Cat,Dog,Bird的子类。
如果我读了一个动物数组,想要访问名为meow()的Cat特定方法,我该怎么做?
我知道我可以使用getClass()来查找Animal的子类,但是我如何使用它来创建访问meow的引用()
答案 0 :(得分:2)
如果您使用的是animal
数组,则需要检查您使用的对象是否为Cat
类的实例,这可以通过使用{{3}来实现运算符。然后,我们可以使用instanceof运算符将Animal
转换为Cat
,然后调用meow()
方法。
if(animal instanceof Cat){
(Cat)animal.meow()
}
使用数组
Animal [] animals = [];
foreach(Animal animal: animals){
//do something
if(animal instanceof Cat){
(Cat)animal.meow()
}
}
答案 1 :(得分:1)
您可以转为Cat
if (animal.getClass().getName().equals('Cat')) {
((Cat)animal).meow();
}
或者您可以使用instanceof
。
这两种解决方案都很丑陋,并且Java不是以这种方式使用的。相反,您应该为可以在内部调用.speak
的动物创建Cat.meow
方法。
答案 2 :(得分:0)
喜欢这个......
if (animal.getClass().getName().equals('Cat')) {
((Cat)animal).meow();
}
或
if (animal instanceof Cat) {
((Cat)animal).meow();
}
答案 3 :(得分:0)
一旦找到了想要使用的子类,就可以进行转换。在你的情况下,它将是
((Cat)animals[index]).meow();