Java方法签名忽略不相等的类返回

Java方法签名忽略不相等的类返回,java,function,types,return,extends,Java,Function,Types,Return,Extends,好的,我尝试执行以下操作: 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。为什么这不起作用?我怎样才能解决这个问题 编辑:我的第一个猜测似乎是错误的方法的返回签名不是官方方法签名的一部分,

好的,我尝试执行以下操作:

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在每个逻辑级别上都失败了。Thx to

但是我不能执行这个,因为B扩展了A

不,你不能编译这个,因为你有。如果您将其中一个方法更改为返回,例如,
String
,则它将不起作用

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

最简单的修复方法是至少重命名其中一种方法,例如
fromB
fromA
。或者,将这些方法放在单独的类中


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

程序绝对无法判断您是否要从()调用第一个或第二个方法,因为除了返回值之外,它们在各个方面都是相同的。使用en IDE进行编码,它会给您带来这种错误,以及许多其他错误;)