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

Tutoriel de base Java

Contrôle de flux Java

Java tableau

Java orienté objet (I)

Java orienté objet (II)

Java orienté objet (III)

Gestion des exceptions Java

Java Liste (List)

Java Queue (file d'attente)

Java Map collection

Java Set collection

Entrée/sortie Java (I/O)

Lecteur Java/Écrivain

Autres sujets Java

Java 8 Méthode par défaut

Java 8 New features

Java 8 Nouvelle méthode par défaut de l'interface.

En termes simples, une méthode par défaut est une méthode que l'interface peut avoir une implémentation, et qui n'a pas besoin que la classe d'implémentation réalise cette méthode.

Nous n'avons qu'à ajouter le mot-clé default devant le nom de la méthode pour réaliser une méthode par défaut.

Pourquoi avoir cette caractéristique ?

Tout d'abord, les interfaces précédentes étaient un double tranchant : l'avantage était de programmer orienté abstraction plutôt que vers l'implémentation concrète, le défaut était que, lorsque l'interface doit être modifiée, il faut modifier toutes les classes qui implémentent cette interface, dans le java 8 Dans les versions précédentes de la collection framework, il n'existait pas de méthode foreach, la solution habituelle consistait à ajouter de nouvelles méthodes et leurs implémentations aux interfaces dans JDK. Cependant, pour les versions déjà publiées, il n'est pas possible d'ajouter de nouvelles méthodes aux interfaces sans affecter les implémentations existantes. C'est pourquoi les méthodes par défaut ont été introduites. Leur objectif est de résoudre les problèmes de compatibilité entre les modifications des interfaces et les implémentations existantes.

Syntaxe

La syntaxe de la méthode par défaut est la suivante :

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

Multiples méthodes par défaut

Un interface a une méthode par défaut, considérons le cas où une classe implémente plusieurs interfaces et que ces interfaces ont des méthodes par défaut identiques, l'exemple suivant montre comment résoudre ce problème :

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-wheeled vehicle!");
   }
}

La première solution consiste à créer sa propre méthode par défaut pour surcharger 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 !");
   }
}

Une 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éthode statique par défaut

Java 8 Une autre caractéristique des interfaces est qu'elles peuvent déclarer (et fournir) des méthodes statiques. Par exemple :

public interface Vehicle {
   default void print(){
      System.out.println("I am a vehicle!");
   }
    // Méthode statique
   static void blowHorn(){
      System.out.println("Horn sound!!!");
   }
}

Exemple de méthode par défaut

Nous pouvons comprendre l'utilisation des méthodes par défaut à l'aide du code suivant, nous pouvons le mettre dans Java8Dans le fichier Tester.java :

public 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("Horn sound!!!");
   }
}
 
interface FourWheeler {
   default void print(){
      System.out.println("I am a four-wheeled vehicle!");
   }
}
 
class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("I am a car!");
   }
}

Execute the above script, the output will be:

$ javac Java8Tester.java 
$ java Java8Tester
I am a vehicle!
I am a four-wheeled vehicle!
Horn sound!!!
I am a car!

Java 8 New features