如何从基类实例中找出子类?

2022-09-03 00:03:25

有没有办法从基类实例中找出派生类的名称?

例如:

class A{
    ....
}
class B extends A{
    ...
}
class c extends A{
    ...
}

现在,如果一个方法返回一个对象,我能找出它是否是类型或?ABC


答案 1

使用或instanceofClass#getClass()

A returned = getA();

if (returned instanceof B) { .. }
else if (returned instanceof C) { .. }

getClass()将返回以下任一项: , ,A.classB.classC.class

在 if 子句中,您需要向下转换 - 即

((B) returned).doSomethingSpecificToB();

也就是说,有时认为使用或是一种不好的做法。您应该使用多态性来避免检查具体子类的需要,但是我无法通过给出的信息告诉您更多。instanceofgetClass()


答案 2

您是否尝试过使用instanceof

例如:

Class A aDerived= something.getSomethingDerivedFromClassA();

if (aDerived instanceof B) {

} else if (aDerived instanceof C) {

}

//Use type-casting where necessary in the if-then statement.