Métodos por defecto de Java 8
Nuevas características de Java 8
Java 8 añade métodos por defecto a las interfaces.
En pocas palabras, los métodos por defecto consisten en que las interfaces pueden tener métodos con implementación, y no es necesario que las clases de implementación implementen esos métodos.
Solo necesitamos añadir la palabra clave `default` delante del nombre del método para implementar un método por defecto.
¿Por qué existe esta característica?
En primer lugar, la interfaz anterior era un arma de doble filo: la ventaja es que se orienta a la abstracción en lugar de a la programación concreta; la desventaja es que, cuando es necesario modificar una interfaz, hay que modificar todas las clases que la implementan. El marco de colecciones anterior a Java 8 no tenía el método foreach; la solución que suele venir a la mente es agregar nuevos métodos y sus implementaciones a las interfaces relevantes en el JDK. Sin embargo, para las versiones ya publicadas, no es posible agregar nuevos métodos a una interfaz sin afectar a las implementaciones existentes. Por eso se introdujeron los métodos por defecto. Su propósito es resolver el problema de incompatibilidad entre la modificación de una interfaz y las implementaciones existentes.
Sintaxis
La sintaxis de los métodos por defecto es la siguiente:
Múltiples métodos por defecto
Una interfaz tiene métodos por defecto. Considera el caso en el que una clase implementa varias interfaces, y estas interfaces tienen el mismo método por defecto. El siguiente ejemplo ilustra cómo resolver esta situación:
La primera solución es crear tu propio método por defecto para sobrescribir el método por defecto de la interfaz:
La segunda solución es usar `super` para invocar el método por defecto de la interfaz especificada:
Métodos estáticos por defecto
Otra característica de Java 8 es que las interfaces pueden declarar (y proporcionar implementación de) métodos estáticos. Por ejemplo:
Ejemplo de métodos por defecto
Podemos entender el uso de los métodos por defecto a través del siguiente código. Puedes poner el código en el archivo Java8Tester.java:
Archivo Java8Tester.java
Al ejecutar el script anterior, el resultado es:
$ javac Java8Tester.java $ java Java8Tester 我是一辆车! 我是一辆四轮车! 按喇叭!!! 我是一辆汽车!
Otras extensiones