Métodos private en Interfaces de Java

1. Introducción

A partir de Java 9, se pueden agregar métodos privados a las interfaces en Java. En este breve tutorial, discutiremos cómo podemos definir estos métodos y sus beneficios.

2. Definir Métodos private en las Interfaces

Los métodos private se pueden implementar de manera estática o no estática. Esto significa que en una interfaz podemos crear métodos private para encapsular el código de las firmas de métodos públicos default y static.

Primero, veamos cómo podemos utilizar métodos privados a partir de métodos default de la interfaz:

public interface Foo {

    default void bar() {
        System.out.print("Hola");
        baz();
    }

    private void baz() {
        System.out.println(" mundo!");
    }
}

bar() es capaz de utilizar el método privado baz() llamándolo desde su método predeterminado.

A continuación, agreguemos un método privado definido de manera estática a nuestra interfaz Foo:

public interface Foo {

    static void buzz() {
        System.out.print("Hola");
        staticBaz();
    }

    private static void staticBaz() {
        System.out.println(" mundo estático!");
    }
}

Dentro de la interfaz, otros métodos definidos de manera estática pueden hacer uso de estos métodos privados y estáticos.

Finalmente, llamemos a los métodos default y static definidos desde una clase concreta:

public class FooPersonalizado implements Foo {

    public static void main(String... args) {
        Foo fooPersonalizado = new FooPersonalizado();
        fooPersonalizado.bar();
        Foo.buzz();
    }
}

La salida es la cadena Hola mundo! desde la llamada al método bar() y Hola mundo estático! desde la llamada al método buzz().

3. Beneficios de los Métodos private en las Interfaces

Hablemos de los beneficios de los métodos privados ahora que los hemos definido.

Como se mencionó en la sección anterior, las interfaces pueden utilizar métodos privados para ocultar detalles de la implementación de las clases que implementan la interfaz. Como resultado, uno de los principales beneficios de tenerlos en las interfaces es la encapsulación.

Otro beneficio es (como ocurre con los métodos privados en general) que hay menos duplicación y más código reutilizable agregado a las interfaces para métodos con funcionalidad similar.

4. Conclusión

En este tutorial, hemos cubierto cómo definir métodos privados dentro de una interfaz y cómo podemos utilizarlos desde contextos tanto estáticos como no estáticos.