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
方法,否则您的类无法实现这两种接口的合理方式。