Leçon 25 : Abstraction à l'aide d'Interfaces
Une Interface est un autre moyen d'atteindre 100% d'abstraction en Java. C'est un plan d'une classe qui définit un contrat : toute classe implémentant l'interface doit définir les méthodes déclarées en son sein.
1. Caractéristiques clés des Interfaces
- Définies à l'aide du mot-clé
interface. - Une classe utilise le mot-clé
implementspour adopter une interface. - Les interfaces supportent l'héritage multiple (une classe peut implémenter plusieurs interfaces).
- Avant Java 8, toutes les méthodes d'une interface étaient implicitement
publicetabstract.
java public interface Swimmer { // Interface // Toutes les méthodes sont public abstract par défaut void swim(); void dive(int depth); }
public class Dolphin implements Swimmer { @Override public void swim() { System.out.println("Le dauphin nage gracieusement."); }
@Override
public void dive(int depth) {
System.out.println("Plonge à " + depth + " mètres.");
}
}
2. Méthodes par défaut (Java 8+)
Avant Java 8, si vous ajoutiez une nouvelle méthode à une interface, toutes les classes implémentant cette interface étaient cassées. Les méthodes par défaut résolvent ce problème en permettant des méthodes avec un corps dans l'interface elle-même.
java public interface Swimmer { void swim();
// Méthode par défaut : fournit une implémentation par défaut
default void checkStatus() {
System.out.println("Statut du nageur : OK");
}
}
// Dolphin n'a pas besoin d'implémenter checkStatus() sauf s'il souhaite la redéfinir.
3. Interfaces vs Classes Abstraites
| Caractéristique | Interface | Classe Abstraite |
|---|---|---|
| Héritage | Multiple (implements) | Simple (extends) |
| Constructeurs | Ne peut pas avoir de constructeurs | Peut avoir des constructeurs |
| Champs | Uniquement public static final | Peut avoir tout type de champ |
| Niveau d'abstraction | 100% (généralement) | 0% à 100% |
Cas d'utilisation : Utilisez des Interfaces pour définir une capacité ou un contrat (ex: Runnable, Comparable). Utilisez des Classes Abstraites pour fournir une implémentation de base pour un ensemble de classes étroitement liées (ex: Shape, Employee).