una property multiple interfaz instanciar inicializar implement crear con como atributos c# java explicit-implementation

property - ¿La C#"implementación explícita" de la interfaz está presente en Java?



interface attributes c# (4)

En C #, si tiene dos interfaces base con el mismo método (digamos, F ()) puede usar la implementación explícita para realizar diferentes impl. para F (). Esto le permite tratar de manera diferente el objeto, que corresponde al punto de vista actual: como IMyInterface1 o IMyInterface2. ¿Es esto posible en Java?


No, no hay nada como la implementación de interfaz explícita de C # en Java.

En el lado positivo, Java tiene tipos de retorno covariantes, por lo que si desea proporcionar una implementación más fuertemente tipada de la especificada por la interfaz, está bien. Por ejemplo, esto está bien:

interface Foo { Object getBar(); } public class Test implements Foo { @Override public String getBar() { return "hi"; } }

C # no lo permitiría, y una de las formas de hacerlo es implementar la interfaz explícitamente y luego tener un método público más específico (generalmente llamado por la implementación de la interfaz).


Solo puede hacer esto si los métodos están sobrecargados. Si tiene dos métodos que se espera que hagan cosas diferentes, deben tener nombres diferentes en mi humilde opinión.


No, y nunca debería estar presente en Java. Es solo otro hueso para tirarle a la gente a la que no se le puede molestar con un buen diseño.

La implementación explícita de una interfaz nunca debería ser necesaria o utilizada. Hay mejores formas de resolver el problema que esto intenta resolver.


Puede lograr un efecto similar utilizando el mecanismo de implementación de interfaz anónima en Java.

Ver ejemplo:

interface Foo { void f(); } interface Bar { void f(); } public class Test { private String foo = "foo", bar = "bar"; Foo getFoo() { return new Foo() { @Override public void f() { System.out.println(foo); } }; } Bar getBar() { return new Bar() { @Override public void f() { System.out.println(bar); } }; } public static void main(String... args) { Test test = new Test(); test.getFoo().f(); test.getBar().f(); } }