Java 捕获返回基类型或派生类型的方法的返回值
我有一个JAVA方法,它可以根据运行时输入返回基类的实例(比如a)或派生类的实例(比如B)。(B源于A) 现在,如果该方法返回类型为“B”的对象,如何将其分配给类型为“B”的引用?我不能只将其分配给基类型的引用,因为我需要使用仅在派生类中存在的成员。好的,您可以这样做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中使用一个通用
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();
}