Java 捕获返回基类型或派生类型的方法的返回值

Java 捕获返回基类型或派生类型的方法的返回值,java,inheritance,polymorphism,return-type,Java,Inheritance,Polymorphism,Return Type,我有一个JAVA方法,它可以根据运行时输入返回基类的实例(比如a)或派生类的实例(比如B)。(B源于A) 现在,如果该方法返回类型为“B”的对象,如何将其分配给类型为“B”的引用?我不能只将其分配给基类型的引用,因为我需要使用仅在派生类中存在的成员。好的,您可以这样做 if (ref instanceof B) { B r = (B)ref; } 但从根本上说,我认为你有一个建模问题。为什么要让工厂(或类似工厂)返回a或B的实例,然后必须确定您得到了什么 也许您可以在a和B中使用一个通用

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

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

好的,您可以这样做

if (ref instanceof B) {
   B r = (B)ref;
}
但从根本上说,我认为你有一个建模问题。为什么要让工厂(或类似工厂)返回
a
B
的实例,然后必须确定您得到了什么

也许您可以在
a
B
中使用一个通用但实现方式不同的方法,并调用该方法,将引用传递给调用者(原始)类。这样,您就可以根据调用的类型和被调用的类型调用不同的方法。

好的,您可以这样做

if (ref instanceof B) {
   B r = (B)ref;
}
但从根本上说,我认为你有一个建模问题。为什么要让工厂(或类似工厂)返回
a
B
的实例,然后必须确定您得到了什么


也许您可以在
a
B
中使用一个通用但实现方式不同的方法,并调用该方法,将引用传递给调用者(原始)类。通过这种方式,您可以根据类型调用和被调用的类型调用不同的方法。

您必须执行显式类型转换以实现这一点,并且在执行此操作之前,通过使用关键字
instanceof
检查类,例如
ref
是否是子类
B
的实例

if (ref instanceof B) { //Check if ref is an instance of base class B
    ((B) ref).function();
}

您必须执行显式类型转换以实现这一点,在执行此操作之前,请使用关键字
instanceof
检查类(例如
ref
是否是子类
B
的实例)

if (ref instanceof B) { //Check if ref is an instance of base class B
    ((B) ref).function();
}