如果我有一个名为 Animal 的超类,以及一个名为 Cat、Dog、Bird 的子类。
如果我读取了一个 Animals 数组,并且想要访问一个名为 meow() 的特定于 Cat 的方法,我该怎么做?
我知道我可以使用 getClass() 来找出 Animal 的子类,但是我如何使用来创建访问 meow() 的引用
如果我有一个名为 Animal 的超类,以及一个名为 Cat、Dog、Bird 的子类。
如果我读取了一个 Animals 数组,并且想要访问一个名为 meow() 的特定于 Cat 的方法,我该怎么做?
我知道我可以使用 getClass() 来找出 Animal 的子类,但是我如何使用来创建访问 meow() 的引用
如果您使用的是 s 数组animal
,则需要检查您正在使用的对象是否是Cat
类的实例,这可以通过使用instanceof运算符来实现。然后我们可以使用向下转换运算符将 a 转换Animal
为 aCat
然后调用该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();