Méthodes par défaut de Java 8

Java 8 新特性Nouveautés de Java 8


Java 8 a introduit des méthodes par défaut pour les interfaces.

En termes simples, les méthodes par défaut signifient que les interfaces peuvent avoir des méthodes implémentées, et les classes qui les implémentent n'ont pas besoin de les implémenter.

Nous devons simplement ajouter le mot-clé default avant le nom de la méthode pour implémenter une méthode par défaut.

Pourquoi avoir cette fonctionnalité ?

Premièrement, l'interface précédente était une arme à double tranchant. L'avantage est qu'elle est orientée vers l'abstraction plutôt que vers une programmation spécifique. L'inconvénient est que lorsqu'il faut modifier l'interface, toutes les classes qui implémentent cette interface doivent être modifiées. Le framework de collections actuel avant Java 8 n'avait pas de méthode foreach. La solution habituelle que l'on peut envisager est d'ajouter de nouvelles méthodes et implémentations aux interfaces concernées dans le JDK. Cependant, pour les versions déjà publiées, il n'y a aucun moyen d'ajouter de nouvelles méthodes à une interface sans affecter les implémentations existantes. C'est pourquoi les méthodes par défaut ont été introduites. Leur but est de résoudre l'incompatibilité entre les modifications d'interface et les implémentations existantes.

Syntaxe

Le format de syntaxe d'une méthode par défaut est le suivant :

public interface Vehicle { default void print(){ System.out.println("I am a car!"); } }

Plusieurs méthodes par défaut

Si une interface a une méthode par défaut, considérez le cas où une classe implémente plusieurs interfaces, et où ces interfaces ont la même méthode par défaut. L'exemple suivant illustre la solution à cette situation :

public interface Vehicle { default void print(){ System.out.println("I am a car!"); } } public interface FourWheeler { default void print(){ System.out.println("Je suis un véhicule à quatre roues !"); } }

La première solution consiste à créer votre propre méthode par défaut pour redéfinir la méthode par défaut de l'interface :

public class Car implements Vehicle, FourWheeler { default void print(){ System.out.println("Je suis une voiture à quatre roues !"); } }

La deuxième solution consiste à utiliser super pour appeler la méthode par défaut de l'interface spécifiée :

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

Méthodes par défaut statiques

Une autre fonctionnalité de Java 8 est que les interfaces peuvent déclarer (et fournir des implémentations de) méthodes statiques. Par exemple :

public interface Vehicle { default void print(){ System.out.println("Je suis une voiture !"); } //Méthodes statiques static void blowHorn(){ System.out.println("Klaxonnez !!!"); } }

Exemple de méthode par défaut

Nous pouvons comprendre l'utilisation des méthodes par défaut à travers le code suivant. Vous pouvez placer le code dans le fichier Java8Tester.java :

Fichier Java8Tester.java

public class Java8Tester { public static void main(String args[]){ Vehicle vehicle = new Car(); vehicle.print(); } } interface Vehicle { default void print(){ System.out.println("Je suis une voiture !"); } static void blowHorn(){ System.out.println("Klaxonnez !!!"); } } interface FourWheeler { default void print(){ System.out.println("Je suis un véhicule à quatre roues !"); } } class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("Je suis une automobile !"); } }

En exécutant le script ci-dessus, le résultat de sortie est :

$ javac Java8Tester.java 
$ java Java8Tester
我是一辆车!
我是一辆四轮车!
按喇叭!!!
我是一辆汽车!

Java 8 新特性Nouveautés de Java 8

Autres extensions