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:
- Variables constantes
- Métodos abstractos
- Métodos predeterminados
- 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:
- Variables constantes
- Métodos abstractos
- Métodos predeterminados
- Métodos estáticos
- Métodos privados
- Métodos estáticos privados
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.