首页 > 解决方案 > Java方法签名忽略不等类返回

问题描述

好的,我尝试执行此操作:

public class A
{
}
public class B extends A
{
}
public class UseAandB {
  public static B from() {return new B();}
  public static A from() {return new A();}
}

但我无法执行此操作,因为 B 扩展了 A。为什么这不起作用?我该如何解决这个问题?

编辑:我的第一个猜测似乎是错误的方法的返回签名不是官方方法签名的一部分,java 在每个逻辑级别上再次失败。感谢安迪·特纳

标签: javafunctiontypesreturnextends

解决方案


但我无法执行此操作,因为 B 扩展了 A

不,您无法编译它,因为您在同一类中有两个等效的替代方法。如果您将其中一种方法更改为返回,例如,它也行不通String

返回类型不是 Java 中方法签名的一部分,因此您不能定义两个仅在返回类型上有所不同的方法。

最简单的解决方法是重命名至少一种方法,例如fromBfromA。或者,将方法放在单独的类中。

(还有其他方法可以编译它,但这些基本上涉及向方法签名添加不必要的额外内容,例如额外未使用的参数。重命名方法是最干净的方法。)


推荐阅读