Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Default Methods

Default Methods

Por jc mouse viernes, abril 5, 2019

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:

default

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:

error compiler

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!!!

Tags

Artículos similares

Autenticación en php con MySql y POO

Autenticación en una pagina web es el proceso de confirmar que un usuario es quien dice ser, asi de simple. En el siguie[...]

Migrar proyecto Netbeans a Eclipse

En ocasiones por motivos cualesquiera que sea queremos pasar proyectos hechos en netbeans a Eclipse, Netbeans cuenta con[...]

Adios al dd(): Realiza debugging de forma ordenada con LaraDumps

Si desarrollas en Laravel, conoces el ritual de escribir dd($variable), refrescar el navegador, analizar los datos, borr[...]

Lo nuevo de HTTP Client

Una de las novedades de Java 9 y 10 aunque por el momento en modo de prueba (jdk.incubator.http) es el Cliente HTTP el c[...]

Software Libre: Decompilador Java

El proyecto «Java Decompiler» tiene como objetivo desarrollar herramientas para descompilar y analizar byte code de  jav[...]

Script PHP – Mouse responde

«Mouse Responde…» simula ser un alma en pena que responde cualquier pregunta que le hagan, al estilo del juego de[...]