Métodos privados en las interfaces de Java 9

Java 9 en adelante, puede incluir métodos privados en las interfaces. Antes de Java 9 no era posible.

Interfaces hasta Java 7

En Java SE 7 o versiones anteriores, una interfaz puede tener solo dos cosas, es decir , variables constantes y métodos abstractos . Estos métodos de interfaz DEBEN ser implementados por clases que eligen implementar la interfaz.

// Java 7 program to illustrate
// private methods in interfaces
public interface TempI {
    public abstract void method(int n);
}
  
class Temp implements TempI {
    @Override
    public void method(int n)
    {
        if (n % 2 == 0)
            System.out.println("geeksforgeeks");
        else
            System.out.println("GEEKSFORGEEKS");
    }
  
    public static void main(String[] args)
    {
        TempI in1 = new Temp();
        TempI in2 = new Temp();
        in1.method(4);
        in2.method(3);
    }
}
OUTPUT : geeksforgeeks
         GEEKSFORGEEKS

Cambios en la interfaz de Java 8

Algunas funciones nuevas para la interfaz se introdujeron en Java 8, es decir, los métodos predeterminados y la función de métodos estáticos. En Java 8, una interfaz puede tener solo cuatro tipos:

  1. Variables constantes
  2. Métodos abstractos
  3. Métodos predeterminados
  4. Métodos estáticos

Ejemplo

// Java 8 program to illustrate
// static, default and abstract methods in interfaces
public interface TempI {
  
    public abstract void div(int a, int b);
  
public default void
    add(int a, int b)
    {
        System.out.print("Answer by Default method = ");
        System.out.println(a + b);
    }
  
    public static void mul(int a, int b)
    {
        System.out.print("Answer by Static method = ");
        System.out.println(a * b);
    }
}
  
class Temp implements TempI {
  
    @Override
    public void div(int a, int b)
    {
        System.out.print("Answer by Abstract method = ");
        System.out.println(a / b);
    }
  
    public static void main(String[] args)
    {
        TempI in = new Temp();
        in.div(8, 2);
        in.add(3, 1);
        TempI.mul(4, 1);
    }
}
OUTPUT : Answer by Abstract method = 4
         Answer by Default method = 4
         Answer by Static method = 4

Cambios en la interfaz de Java 9

Java 9 introdujo métodos privados y métodos estáticos privados en las interfaces. En Java 9 y versiones posteriores, una interfaz puede tener seis cosas diferentes:

  1. Variables constantes
  2. Métodos abstractos
  3. Métodos predeterminados
  4. Métodos estáticos
  5. Métodos privados
  6. Métodos estáticos privados
  7. Estos métodos privados mejorarán la reutilización del código dentro de las interfaces y brindarán la opción de exponer a los usuarios solo las implementaciones de métodos previstas. Solo se puede acceder a estos métodos dentro de esa interfaz y no se puede acceder ni heredar de una interfaz a otra interfaz o clase.

    // Java 9 program to illustrate
    // private methods in interfaces
    public interface TempI {
      
        public abstract void mul(int a, int b);
      
    public default void
        add(int a, int b)
        {
    // private method inside default method
            sub(a, b); 
      
     // static method inside other non-static method
            div(a, b);
            System.out.print("Answer by Default method = ");
            System.out.println(a + b);
        }
      
        public static void mod(int a, int b)
        {
            div(a, b); // static method inside other static method
            System.out.print("Answer by Static method = ");
            System.out.println(a % b);
        }
      
        private void sub(int a, int b)
        {
            System.out.print("Answer by Private method = ");
            System.out.println(a - b);
        }
      
        private static void div(int a, int b)
        {
            System.out.print("Answer by Private static method = ");
            System.out.println(a / b);
        }
    }
      
    class Temp implements TempI {
      
        @Override
        public void mul(int a, int b)
        {
            System.out.print("Answer by Abstract method = ");
            System.out.println(a * b);
        }
      
        public static void main(String[] args)
        {
            TempI in = new Temp();
            in.mul(2, 3);
            in.add(6, 2);
            TempI.mod(5, 3);
        }
    }
    OUTPUT : Answer by Abstract method = 6              // mul(2, 3) = 2*3 = 6
             Answer by Private method = 4               // sub(6, 2) = 6-2 = 4 
             Answer by Private static method = 3        // div(6, 2) = 6/2 = 3
             Answer by Default method = 8               // add(6, 2) = 6+2 = 8
             Answer by Private static method = 1        // div(5, 3) = 5/3 = 1 
             Answer by Static method = 2                // mod(5, 3) = 5%3 = 2
    

     
    Reglas para usar métodos privados en interfaces

  • El método de interfaz privada no puede ser abstracto ni modificadores privados y abstractos juntos.
  • El método privado solo se puede usar dentro de la interfaz y otros métodos de interfaz estáticos y no estáticos.
  • Los métodos privados no estáticos no se pueden usar dentro de los métodos estáticos privados.
  • Deberíamos usar el modificador privado para definir estos métodos y una accesibilidad no menor que el modificador privado.

 
Entonces, desde arriba se puede concluir que los métodos de interfaz privada de Java 9 pueden ser estáticos o de instancia. En ambos casos, las subinterfaces o implementaciones no heredan el método privado. Están allí principalmente para mejorar la reutilización del código solo dentro de la interfaz, mejorando así la encapsulación.

Publicación traducida automáticamente

Artículo escrito por Ankit87 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *