Java LanguageMétodos predeterminados


Introducción

El método predeterminado introducido en Java 8 permite a los desarrolladores agregar nuevos métodos a una interfaz sin romper las implementaciones existentes de esta interfaz. Proporciona flexibilidad para permitir que la interfaz defina una implementación que se utilizará como predeterminada cuando una clase que implementa esa interfaz no puede proporcionar una implementación de ese método.

Sintaxis

  • Nombre del método vacío público predeterminado () {/ * cuerpo del método * /}

Observaciones

Métodos predeterminados

  • Puede usarse dentro de una interfaz, para introducir un comportamiento sin forzar las subclases existentes para implementarlo.
  • Puede ser reemplazado por subclases o por una sub-interfaz.
  • No se les permite anular los métodos en la clase java.lang.Object.
  • Si una clase que implementa más de una interfaz, hereda los métodos predeterminados con firmas de métodos idénticas de cada una de las interfaces, debe invalidar y proporcionar su propia interfaz como si no fueran métodos predeterminados (como parte de la resolución de la herencia múltiple).
  • A pesar de que están destinadas a introducir un comportamiento sin romper las implementaciones existentes, las subclases existentes con un método estático con la misma firma de método que el método por defecto recién introducido todavía se romperán. Sin embargo, esto es cierto incluso en el caso de introducir un método de instancia en una superclase.



Métodos estáticos

  • Puede usarse dentro de una interfaz, principalmente destinada a ser utilizada como un método de utilidad para los métodos predeterminados.
  • No puede ser reemplazado por subclases o por una sub-interfaz (está oculto para ellos). Sin embargo, como es el caso de los métodos estáticos, incluso ahora, cada clase o interfaz puede tener la suya propia.
  • No se les permite anular los métodos de instancia en la clase java.lang.Object (como en la actualidad es el caso de las subclases también).



A continuación se muestra una tabla que resume la interacción entre subclase y superclase.

- SUPER_CLASS-INSTANCE-METHOD SUPER_CLASS-STATIC-METHOD
SUB_CLASS-INSTANCE-METHOD anula genera-compiletime-error
SUB_CLASS-STATIC-METHOD genera-compiletime-error se esconde



A continuación se muestra una tabla que resume la interacción entre la interfaz y la clase de implementación.

- INTERFACE-DEFAULT-METHOD INTERFACE-ESTÁTICO-MÉTODO
IMPL_CLASS-INSTANCE-METHOD anula se esconde
IMPL_CLASS-STATIC-METHOD genera-compiletime-error se esconde

Referencias:

  • http://www.journaldev.com/2752/java-8-interface-changes-static-method-default-method
  • https://docs.oracle.com/javase/tutorial/java/IandI/override.html

Métodos predeterminados Ejemplos relacionados