0

我有一个 JAVA 方法,它可以根据运行时输入返回基类的实例(比如 A)或派生类的实例(比如 B)。(B派生自A)

现在,如果方法返回“B”类型的对象,我如何将它分配给“B”类型的引用?我不能只将它分配给基类型的引用,因为我需要使用仅存在于派生类中的成员。

4

3 回答 3

5

好吧,你可以做

if (ref instanceof B) {
   B r = (B)ref;
}

但从根本上说,我认为你有一个建模问题。为什么你有一个工厂(或类似的)返回Aor的实例B,然后必须确定你得到了什么?

A也许您可以在and中拥有一个通用但实现方式不同的方法B,然后调用它,将您的引用传递给调用者(发起)类。这样,您可以根据类型调用和被调用的类型调用不同的方法。

于 2013-06-03T12:59:58.590 回答
0

您必须进行显式类型转换才能使这成为可能,并且在执行此操作之前检查类ref是否是子类的实例,B使用关键字instanceof

if (ref instanceof B) { //Check if ref is an instance of base class B
    ((B) ref).function();
}
于 2013-06-03T13:00:57.017 回答
0
A a = yourMethod(input);
if (a instanceof B) {
  B b = (B) a;
  b.subclassmethod();
} 
于 2013-06-03T13:02:03.303 回答