我有一个JAVA方法,它可以返回基类的实例(Say A)或派生类的实例(比如B),具体取决于运行时输入。 (B来自A)
现在,在方法返回类型为“B”的对象的情况下,如何将其分配给类型为“B”的引用?我不能只将它分配给基类型的引用,因为我需要使用仅在派生类中的成员。
答案 0 :(得分:5)
嗯,你可以做到
if (ref instanceof B) {
B r = (B)ref;
}
但从根本上说,我认为你有一个建模问题。为什么你有一个工厂(或类似的)返回A
或B
的实例,然后必须确定你被给予了什么?
也许你可以有一个共同的方法,但在A
和B
中都有不同的实现,并调用它,传入你对caller(originating)类的引用。这样,您可以根据类型调用和被调用的类型调用不同的方法。
答案 1 :(得分:0)
你必须进行显式类型转换才能实现这一点,在进行检查之前,使用关键字ref
检查类B
是否是子类instanceof
的实例。 / p>
if (ref instanceof B) { //Check if ref is an instance of base class B
((B) ref).function();
}
答案 2 :(得分:0)
A a = yourMethod(input);
if (a instanceof B) {
B b = (B) a;
b.subclassmethod();
}