捕获返回基类型或派生类型的Method的返回值

时间:2013-06-03 12:58:42

标签: java inheritance polymorphism return-type

我有一个JAVA方法,它可以返回基类的实例(Say A)或派生类的实例(比如B),具体取决于运行时输入。 (B来自A)

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

3 个答案:

答案 0 :(得分:5)

嗯,你可以做到

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

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

也许你可以有一个共同的方法,但在AB中都有不同的实现,并调用它,传入你对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();
}