6. Exercice : Comprendre les contrats d’interface et les méthodes par défaut¶
Objectifs¶
- Comprendre le rôle d’une interface comme contrat en Java.
- Savoir utiliser les méthodes par défaut pour factoriser du code dans une interface.
- Implémenter plusieurs classes respectant le même contrat.
Consignes¶
-
Définir une interface
Logger: Créez une interfaceLoggerqui déclare les méthodes suivantes :void log(String message): Méthode abstraite pour enregistrer un message.- Méthode par défaut :
void logWithTimestamp(String message)
Cette méthode doit ajouter un timestamp (heure actuelle) au message avant de l’enregistrer, puis appelerlog(String message).
Indice : Utilisezjava.time.LocalDateTime.now()pour obtenir l’heure actuelle.
-
Implémenter deux classes concrètes : Créez deux classes qui implémentent
Logger:ConsoleLogger: Affiche les messages dans la console (utilisezSystem.out.println).FileLogger: Enregistre les messages dans un fichier nommélog.txt.
Indice : Utilisezjava.io.FileWriterpour écrire dans un fichier.
-
Tester les implémentations : Dans une classe
Main, créez des instances deConsoleLoggeretFileLogger, puis appelez :log("Test sans timestamp")logWithTimestamp("Test avec timestamp")
Vérifiez que les messages s’affichent correctement dans la console et dans le fichier.
Questions de réflexion¶
- Pourquoi dit-on qu’une interface définit un contrat ? En quoi cela diffère-t-il d’une classe abstraite ?
- Quel est l’avantage d’utiliser une méthode par défaut dans
Loggerplutôt que de redéfinirlogWithTimestampdans chaque classe ? - Si vous ajoutiez une nouvelle méthode abstraite à
Logger, que devriez-vous faire pour que le code continue de compiler ?