En C#, si tiene dos interfaces base con el mismo método (por ejemplo, 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?¿La C# "implementación explícita" de la interfaz está presente en Java?
Respuesta
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á muy bien:
interface Foo
{
Object getBar();
}
public class Test implements Foo
{
@Override
public String getBar()
{
return "hi";
}
}
C# no permitiría que - y una de las formas de hacerlo es por lo general para implementar la interfaz de forma explícita 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 ni 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();
}
}
- 1. abstracta implementación de interfaz explícita en C#
- 2. Implementación implícita y explícita de la interfaz
- 3. "Restricciones para la implementación de interfaz explícita ..."
- 4. ¿Cómo se refleja en la implementación explícita de la interfaz C# desde la pila de llamadas?
- 5. Implementación de interfaz explícita en VB.NET
- 6. implícita vs implementación de interfaz explícita
- 7. C Diseño # Idioma: implementación de interfaz explícita de un evento
- 8. ¿Por qué implementación de interfaz explícita?
- 9. Implementación de interfaz explícita y Reflection.Emit
- 10. Implementación de la interfaz Java en MATLAB
- 11. Cómo emitir implementación de interfaz explícita usando Reflection.Emit?
- 12. ¿Tiene sentido la implementación de la interfaz tanto implícita como explícita?
- 13. inicializador de objeto con interfaz explícita en C#
- 14. Implementación de interfaz genérica en Java
- 15. La implementación de una interfaz Java en Scala
- 16. C# implementación anónima de la interfaz (o clase abstracta)
- 17. Implementación de la interfaz Java Iterable <E>
- 18. Implementación de la interfaz IList
- 19. ¿Por qué la implementación explícita de una interfaz no puede ser pública?
- 20. Par de implementación de interfaz Java
- 21. Forzar implementación de interfaz genérica en C#
- 22. Anulación explícita de la función virtual
- 23. La implementación de la misma interfaz en diferentes instancias genéricas
- 24. Compruebe si la consola está presente
- 25. Comenta la interfaz, la implementación o ambas?
- 26. Problema con la implementación de la interfaz en clases parciales
- 27. interfaz Java y la herencia
- 28. rieles validar que password_confirmation está presente cuando la contraseña también está presente o se ha cambiado
- 29. La implementación de Java SSL de Sun está perdiendo memoria?
- 30. Interfaz de implementación frente a interfaz de implementación explícitamente en C#
¿Usted también cree que la herencia privada es sólo para las personas que "no puede ser molestado con un buen diseño"? Esa es otra capacidad OOP útil que falta en Java. –
Nunca estará en Java por la misma razón que los delegados nunca estarán en Java ... google it. Hay un buen artículo sobre por qué los delegados nunca hicieron en Java y esto es similar. Es malo por lo que te permite no hacer las cosas buenas que puedes hacer con él. Algo que Microsoft y su ecosistema no obtienen. – eaglestorm
@ealgestorm, te das cuenta de que incluso Swing "abusa" de los objetos para que se comporten como delegados, ¿verdad? Además, me parece un poco divertido que casi todas tus preguntas estén relacionadas con .NET. –