Java中的冲突接口方法

可能重复:
接口实现中的方法名称冲突 – Java

如果我们需要实现两个接口,包含一个具有相同名称和参数但返回类型不同的方法,我们该怎么办? 例如:

interface A { public int foo(); } interface B { public double foo(); } class C implements A, B { public int foo() {...} // compilation error } 

有没有一种简单的方法可以解决这个问题?

最简单的解决方案是始终在A中返回double ,因为它可以存储每个可能的int值。

如果您不是选项,则需要使用inheritance替代方法。

 class C { public A getA(); public B getB(); } C c = new C(); int a = c.getA().foo(); double b = c.getB().foo(); 

你不能。 Java通过名称及其参数唯一地标识方法,而不是它们的返回类型。

您可以编写Adapter类来实现其中一个接口。

示例实现:

 class AdapterA implements A{ AdapterA(C c){impl = c;} private final C impl; public int foo(){return c.fooReturningInt();} } class C implements B{ public double foo(){...} public int fooReturningInt(){...} } 

在接口A和B中使用Number而不是double和int。

Java中的方法由其签名唯一定义。 来自http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

定义:方法声明的两个组件包括方法签名 – 方法的名称和参数类型。

您的foo()方法显然没有明确定义。 可能应该有一个带有public Number foo()的父接口,它由A和B扩展,并将其覆盖为更具体的类型。 除非重命名其中一个foo方法,否则您的类无法实现这两种接口的合理方式。