我有一个 JAVA 方法,它可以根据运行时输入返回基类的实例(比如 A)或派生类的实例(比如 B)。(B派生自A)
现在,如果方法返回“B”类型的对象,我如何将它分配给“B”类型的引用?我不能只将它分配给基类型的引用,因为我需要使用仅存在于派生类中的成员。
我有一个 JAVA 方法,它可以根据运行时输入返回基类的实例(比如 A)或派生类的实例(比如 B)。(B派生自A)
现在,如果方法返回“B”类型的对象,我如何将它分配给“B”类型的引用?我不能只将它分配给基类型的引用,因为我需要使用仅存在于派生类中的成员。
好吧,你可以做
if (ref instanceof B) {
B r = (B)ref;
}
但从根本上说,我认为你有一个建模问题。为什么你有一个工厂(或类似的)返回A
or的实例B
,然后必须确定你得到了什么?
A
也许您可以在and中拥有一个通用但实现方式不同的方法B
,然后调用它,将您的引用传递给调用者(发起)类。这样,您可以根据类型调用和被调用的类型调用不同的方法。
您必须进行显式类型转换才能使这成为可能,并且在执行此操作之前检查类ref
是否是子类的实例,B
使用关键字instanceof
。
if (ref instanceof B) { //Check if ref is an instance of base class B
((B) ref).function();
}
A a = yourMethod(input);
if (a instanceof B) {
B b = (B) a;
b.subclassmethod();
}