Java 8 - Métodos predeterminados
Java 8 introduce un nuevo concepto de implementación de métodos predeterminados en las interfaces. Esta capacidad se agrega para la compatibilidad con versiones anteriores, de modo que las interfaces antiguas se puedan usar para aprovechar la capacidad de expresión lambda de Java 8.
Por ejemplo, las interfaces 'Lista' o 'Colección' no tienen declaración de método 'forEach'. Por lo tanto, agregar dicho método simplemente romperá las implementaciones del marco de la colección. Java 8 introduce el método predeterminado para que la interfaz Lista/Colección pueda tener una implementación predeterminada del método forEach, y la clase que implementa estas interfaces no necesita implementar lo mismo.
Sintaxis
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } }
Múltiples valores predeterminados
Con funciones predeterminadas en las interfaces, existe la posibilidad de que una clase esté implementando dos interfaces con los mismos métodos predeterminados. El siguiente código explica cómo se puede resolver esta ambigüedad.
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } } public interface fourWheeler { default void print() { System.out.println("I am a four wheeler!"); } }
La primera solución es crear un método propio que anule la implementación predeterminada.
public class car implements vehicle, fourWheeler { public void print() { System.out.println("I am a four wheeler car vehicle!"); } }
La segunda solución es llamar al método predeterminado de la interfaz especificada usando super.
public class car implements vehicle, fourWheeler { public void print() { vehicle.super.print(); } }
Métodos predeterminados estáticos
Una interfaz también puede tener métodos auxiliares estáticos desde Java 8 en adelante.
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } static void blowHorn() { System.out.println("Blowing horn!!!"); } }
Ejemplo de método predeterminado
Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.
Java8Tester.java
Demostración en vivopublic class Java8Tester { public static void main(String args[]) { Vehicle vehicle = new Car(); vehicle.print(); } } interface Vehicle { default void print() { System.out.println("I am a vehicle!"); } static void blowHorn() { System.out.println("Blowing horn!!!"); } } interface FourWheeler { default void print() { System.out.println("I am a four wheeler!"); } } class Car implements Vehicle, FourWheeler { public void print() { Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("I am a car!"); } }
Verificar el resultado
Compile la clase usando javac compilador de la siguiente manera -
C:\JAVA>javac Java8Tester.java
Ahora ejecute Java8Tester de la siguiente manera -
C:\JAVA>java Java8Tester
Debería producir el siguiente resultado -
I am a vehicle! I am a four wheeler! Blowing horn!!! I am a car!
Java