sistema proyecto interfaz interfaces gráfica graficas grafica desde curso cola coca cero java interface override

proyecto - Métodos de interfaz en conflicto en Java



java desde cero 27 (6)

Posible duplicado:
Método de colisión en la implementación de la interfaz - Java

¿Qué hacemos si necesitamos implementar dos interfaces que contengan un método con el mismo nombre y parámetros, pero con diferentes tipos de retorno? Por ejemplo:

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

¿Hay una manera fácil de superar este problema?


La solución más sencilla es devolver siempre el double en A, ya que puede almacenar todos los valores int posibles.

Si no es una opción, debe utilizar una alternativa a la herencia.

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


Puede escribir una clase de Adapter para implementar una de las interfaces.

Ejemplo de implementación:

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(){...} }


Tu método foo() claramente no está bien definido. Probablemente debería haber una interfaz principal con un public Number foo() , que se extiende por A y B, que lo anulan a un tipo más específico. Realmente no hay una forma sensata en que su clase pueda implementar ambas interfaces a menos que cambie el nombre de uno de los métodos foo .



Use Number en lugar de double e int en la interfaz A y B.


Usted no puede Java identifica de forma única los métodos por su nombre y sus parámetros, no por su tipo de retorno.