有没有办法从基类实例中找出派生类的名称?
例如:
class A{
....
}
class B extends A{
...
}
class c extends A{
...
}
现在如果一个方法返回一个A
的对象,我能找出它是B
还是C
类型吗?
最佳答案
使用 instanceof
或 Class#getClass()
A returned = getA();
if (returned instanceof B) { .. }
else if (returned instanceof C) { .. }
getClass()
将返回以下任一个:A.class
、B.class
、C.class
在 if 子句中你需要向下转型——即
((B) returned).doSomethingSpecificToB();
也就是说,有时人们认为使用 instanceof
或 getClass()
是一种不好的做法。你应该使用 polymorphism尽量避免检查具体子类的需要,但我不能用给定的信息告诉你更多信息。
关于java - 如何从基类实例中找出子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856122/