simple polimorfismo multiple metodos manejo interfaces herencia ejercicios ejemplos ejemplo con clases abstractas java java-8

polimorfismo - ¿Cómo funciona el nuevo modelo de interfaz predeterminado de Java 8(incluido el diamante, la herencia múltiple y la precedencia)?



metodos default java (2)

Aquí hay una explicación detallada para el nuevo modelo de interfaz Java 8 ''y el problema del diamante de la herencia múltiple .

Como puede ver en estos ejemplos, comenzando con JDK 8 , Java ha introducido un tipo de herencia múltiple ya que ambos, la clase y su interfaz pueden contener una implementación del mismo método (mismo nombre y firma). Para abordar el problema del diamante, existe una prioridad en el orden en que se utiliza una implementación: solo si la clase implementa todos los métodos predeterminados / opcionales de sus interfaces, el código se puede compilar y se usan las implementaciones de esta clase. De lo contrario, el compilador intenta parchar la (s) implementación (es) faltante (s) con la implementación predeterminada de la interfaz . Y si hay múltiples implementaciones predeterminadas de un método, entonces ocurre el problema del diamante y el compilador rechaza la compilación.
El nuevo modelo de interfaces Java 8 ''es el resultado de acercarse a la compatibilidad con versiones anteriores , es decir, mantener compilado el código existente escrito contra las interfaces pre Java 8.

¿Cómo funciona este nuevo modelo de interfaz y de qué se trata?

  • el problema del diamante que podría surgir de este
  • carácter de herencia múltiple de esta implementación
  • y la precedencia con la que se utilizan las implementaciones de interfaz?

Hay una explicación perfecta en las preguntas frecuentes de Java Lambda .
Aquí hay una cita de ¿Qué pasa con el problema del diamante? artículo allí:

interface A { void m() default { ... } } interface B extends A {} interface C extends A {} class D implements B, C {}

En el caso inicial (el código anterior), la implementación de m heredada por D es inequívocamente definida por A - no hay otra posibilidad. Si la situación cambia, B ahora también declara una implementación predeterminada de m , que se convierte en la implementación que D hereda con la regla de "implementación más específica". Pero si tanto B como C proporcionan implementaciones predeterminadas, entonces entran en conflicto, y D debe usar la sintaxis X.super.m (...) para elegir explícitamente una de ellas, o redeclarar el método en sí, anulando todas las declaraciones de supertipo.

Asegúrese de revisar el artículo anterior sobre las reglas para resolver declaraciones de métodos en conflicto y otros artículos sobre el proyecto Java Lambda: son bastante buenos.