在运行时识别子类

1 java

我想知道如何在java中运行时识别子类.在我的程序中,我正在调用一个返回超类对象的方法.该对象可以是其任何一个子类的实例.我想知道对象是运行时哪个子类的实例,以便我可以将它转换为该子类并访问子类方法.任何人都可以帮助我吗?

谢谢

Lau*_*ves 7

您可以使用instanceof来检查对象是否是特定类的实例.例如:

if (animal instanceof Cat) {
    Cat cat = (Cat) animal;
    cat.meow();
} else if (animal instanceof Dog) {
    Dog dog = (Dog) animal;
    dog.bark();
}
Run Code Online (Sandbox Code Playgroud)

然而,过度使用instanceof(或者说是向下铸造)通常被认为是设计不良的标志.最好是利用多态性.例如,在Animal中有一个(可能是抽象的)"speak"方法,然后每个子类将有不同的实现.然后上面的代码将替换为发言:

animal.speak();
Run Code Online (Sandbox Code Playgroud)