Java 8 - Méthodes par défaut
Java 8 introduit un nouveau concept d'implémentation de méthode par défaut dans les interfaces. Cette capacité est ajoutée pour la rétrocompatibilité afin que les anciennes interfaces puissent être utilisées pour tirer parti de la capacité d'expression lambda de Java 8.
Par exemple, les interfaces "List" ou "Collection" n'ont pas de déclaration de méthode "forEach". Ainsi, l'ajout d'une telle méthode cassera simplement les implémentations du framework de collecte. Java 8 introduit la méthode par défaut afin que l'interface List/Collection puisse avoir une implémentation par défaut de la méthode forEach, et la classe implémentant ces interfaces n'a pas besoin d'implémenter la même chose.
Syntaxe
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } }
Plusieurs valeurs par défaut
Avec les fonctions par défaut dans les interfaces, il est possible qu'une classe implémente deux interfaces avec les mêmes méthodes par défaut. Le code suivant explique comment cette ambiguïté peut être résolue.
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 première solution consiste à créer une méthode propre qui remplace l'implémentation par défaut.
public class car implements vehicle, fourWheeler { public void print() { System.out.println("I am a four wheeler car vehicle!"); } }
La deuxième solution consiste à appeler la méthode par défaut de l'interface spécifiée à l'aide de super.
public class car implements vehicle, fourWheeler { public void print() { vehicle.super.print(); } }
Méthodes statiques par défaut
Une interface peut également avoir des méthodes d'assistance statiques à partir de Java 8.
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } static void blowHorn() { System.out.println("Blowing horn!!!"); } }
Exemple de méthode par défaut
Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.
Java8Tester.java
Démo en directpublic 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!"); } }
Vérifier le résultat
Compilez la classe en utilisant javac compilateur comme suit -
C:\JAVA>javac Java8Tester.java
Exécutez maintenant le Java8Tester comme suit -
C:\JAVA>java Java8Tester
Il devrait produire la sortie suivante -
I am a vehicle! I am a four wheeler! Blowing horn!!! I am a car!
Java