1

如果我有一个名为 Animal 的超类,以及一个名为 Cat、Dog、Bird 的子类。

如果我读取了一个 Animals 数组,并且想要访问一个名为 meow() 的特定于 Cat 的方法,我该怎么做?

我知道我可以使用 getClass() 来找出 Animal 的子类,但是我如何使用来创建访问 meow() 的引用

4

4 回答 4

2

如果您使用的是 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()
    }
}
于 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 回答