English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

control de flujo Java

Java arrays

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Queue (cola)

Java Map colección

Java Set colección

Entrada y salida de Java (I/O)

Java Reader/Writer

Otras temáticas de Java

Java 8 Métodos por defecto

Java 8 Nuevas características

Java 8 Se han añadido métodos por defecto a las interfaces.

En pocas palabras, un método por defecto es que las interfaces pueden tener métodos de implementación y no necesitan que la clase de implementación implemente el método.

Sólo hay que agregar la palabra clave default delante del nombre del método para implementar un método por defecto.

¿Por qué tener esta característica?

Primero, las interfaces anteriores eran una espada de dos filos, ventajas: programación orientada a la abstracción en lugar de a la específica, defectos: cuando se necesita modificar una interfaz, se debe modificar todos los clases que implementan la interfaz, en el actual java 8 La colección de frameworks anteriores no tenía el método foreach, generalmente la solución sería agregar nuevos métodos y su implementación a las interfaces relacionadas en JDK. Sin embargo, para las versiones ya lanzadas, no se puede agregar nuevos métodos a las interfaces sin afectar las implementaciones existentes. Por lo tanto, se introdujeron los métodos por defecto. Su propósito es resolver el problema de la incompatibilidad entre la modificación de las interfaces y las implementaciones existentes.

Sintaxis

El formato de sintaxis de los métodos por defecto es el siguiente:

public interface Vehicle {
   default void print(){
      System.out.println("Soy un coche!");
   }
}

Múltiples métodos por defecto

Consideremos una interfaz con un método por defecto, y una clase que implementa múltiples interfaces, y estas interfaces tienen métodos por defecto idénticos. El siguiente ejemplo ilustra cómo se puede resolver esta situación:

public interface Vehicle {
   default void print(){
      System.out.println("Soy un coche!");
   }
}
 
public interface FourWheeler {
   default void print(){
      System.out.println("Soy un coche de cuatro ruedas!");
   }
}

La primera solución es crear su propio método por defecto para sobrescribir el método por defecto de la interfaz:

public class Car implements Vehicle, FourWheeler {
   default void print(){
      System.out.println("Soy un coche de cuatro ruedas!");
   }
}

Una segunda solución es usar super para llamar al método por defecto de la interfaz especificada:

public class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
   }
}

Métodos estáticos por defecto

Java 8 Otra característica es que las interfaces pueden declarar (y proporcionar) métodos estáticos. Por ejemplo:

public interface Vehicle {
   default void print(){
      System.out.println("Soy un coche!");
   }
    // Método estático
   static void blowHorn(){
      System.out.println("¡Pitido!!!");
   }
}

Ejemplo de método por defecto

Podemos entender el uso de métodos por defecto a través del siguiente código, que se puede poner en Java8Tester.java archivo en el que:

public class Java8Tester {
   public static void main(String args[]){
      Vehicle vehicle = new Car();
      vehicle.print();
   }
}
 
interface Vehicle {
   default void print(){
      System.out.println("Soy un coche!");
   }
    
   static void blowHorn(){
      System.out.println("¡Pitido!!!");
   }
}
 
interface FourWheeler {
   default void print(){
      System.out.println("Soy un coche de cuatro ruedas!");
   }
}
 
class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("Soy un coche!");
   }
}

Ejecutar el siguiente script, el resultado de salida será:

$ javac Java8Tester.java 
$ java Java8Tester
Soy un coche!
Soy un coche de cuatro ruedas!
¡Pitido!!!
Soy un coche!

Java 8 Nuevas características