Uno de los cambios principales introducidos a las interfaces en Java 8 fue que estos puedan tener métodos concretos, es decir, métodos con cuerpo y métodos abstractos, esto con el fin de ayudar a los desarrolladores de APIs de Java a actualizar y mantener las interfaces.
Estos métodos deben ser declarados como métodos «default«. Pero veamos mejor con un ejemplo este tipo de métodos.
Esta es una interface típica sin métodos default
public interface InterfaceSinDefault { public void caminar(); }
Ahora una interface que implementa un método default
public interface InterfaceConDefault { public void caminar(); default void saluda() { System.out.println("Hola a todos!!!"); } }
Claramente podemos advertir la presencia del método default ya que esta inicia con la palabra reservada default y si o si debe estar implementado, en este ejemplo, imprime un saludo por consola.
Implementación
Toda clase que implemente nuestra interface con el método default hereda este método por lo tanto, no debemos sobre escribirlo, si lo haces (que si se puede), dejara de ser un método default.
public class MiClase implements InterfaceConDefault { public static void main(String[] args) { MiClase miClase = new MiClase(); miClase.caminar(); miClase.saluda(); } @Override public void caminar() { System.out.println("caminando por el parque"); } }
Y tenemos:
pero…
¿Que pasa si dos o más interfaces tienen métodos con el mismo nombre?
No podremos implementarlas ya que el propio compilador se encargara de alertarnos:
Sin embargo podríamos sobrescribir el método default de cualquier interface, pero claro, como dijimos más arriba, este dejaría de se un método default, es decir:
@Override
public void saluda(){
InterfaceConDefault.super.saluda();
}
Como dijimos al principio se introdujeron este tipo de métodos para agregar características adicionales a las interfaces actuales sin interrumpir sus implementaciones existentes. Por ejemplo tenemos a stream() es un método default que se agrega a la interface Collection en Java 8. Si stream() se hubiera agregado como método abstracto, entonces todas las clases que implementan la interface Collection deberían haber implementado el método stream() algo que habría traído muchos problemas. En conclusión fue un movimiento inteligente para evolucionar la API.
enjoy!!!
Segunda y ultima parte del post dedicado a la creación de un microservicio en lenguaje java utilizando el framework Spar[...]
En este post haremos uso de PanoramaImageView para agregar a una aplicación android, una vista panorámica de 180° y 360°[...]
Desarrolle un programa en consola con un menú para el usuario que permita agregar elementos a una pila, eliminar element[...]
En este post veremos un ejemplo sencillo de como descargar desde Internet archivos de cualquier tipo (*.jpg, *.png, *.gi[...]
Java Help es (o era) una librería para java que permitía añadir ventanas de ayuda HTML a nuestros proyectos, al ser una[...]
Jasperreport nos brinda su propio visor de reportes, sin embargo en ocasiones queremos mostrar los informes directamente[...]