Retour au cours

Abstraction à l'aide d'Interfaces (et Méthodes par défaut)

Maîtrise de Java : De Zéro à Développeur Professionnel (Un parcours en 50 leçons)

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

  1. Définies à l'aide du mot-clé interface.
  2. Une classe utilise le mot-clé implements pour adopter une interface.
  3. Les interfaces supportent l'héritage multiple (une classe peut implémenter plusieurs interfaces).
  4. Avant Java 8, toutes les méthodes d'une interface étaient implicitement public et abstract.

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éristiqueInterfaceClasse Abstraite
HéritageMultiple (implements)Simple (extends)
ConstructeursNe peut pas avoir de constructeursPeut avoir des constructeurs
ChampsUniquement public static finalPeut avoir tout type de champ
Niveau d'abstraction100% (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).