Introduction aux Interfaces
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 34 sur 87.
Vous avez vu comment les classes abstraites définissent des contrats que les sous-classes doivent suivre. Mais que se passe-t-il si vous voulez qu'une classe suive plusieurs contrats ? Java ne permet pas à une classe d'étendre plusieurs classes, mais il résout ce problème avec des interfaces.
Une interface est un contrat qui définit ce qu'une classe peut faire, sans spécifier comment elle le fait. Contrairement aux classes abstraites, les interfaces ne contiennent que des signatures de méthodes (par défaut) sans aucune implémentation :
public interface Drawable {
void draw();
}
public interface Resizable {
void resize(int width, int height);
}Considérez une interface comme une promesse. Lorsqu'une classe implémente une interface, elle promet de fournir des implémentations pour toutes les méthodes déclarées dans cette interface. L'interface définit la capacité, et la classe fournit le comportement.
Les interfaces sont déclarées en utilisant le mot-clé interface au lieu de class. Toutes les méthodes d'une interface sont implicitement public et abstract, vous n'avez donc pas besoin d'écrire ces mots-clés :
public interface Playable {
void play(); // implicitement public abstract
void pause();
void stop();
}Les interfaces peuvent également déclarer des constantes, qui sont implicitement public static final :
public interface GameConstants {
int MAX_PLAYERS = 4; // implicitement public static final
}Dans la prochaine leçon, vous apprendrez comment les classes implémentent des interfaces en utilisant le mot-clé implements.
Défi
FacileConstruisons un système de contrôle d'appareils en définissant des interfaces qui décrivent ce que différents appareils peuvent faire. Ce défi se concentre sur la création d'interfaces — les contrats qui définissent les capacités sans spécifier comment elles fonctionnent.
Vous organiserez votre code sur trois fichiers :
Switchable.java: Créez une interface qui définit ce que signifie pour un appareil d'être commutable. Tout appareil commutable doit pouvoir s'allumer et s'éteindre. Déclarez deux méthodes :turnOn()etturnOff(). Rappelez-vous, les méthodes d'interface sont implicitement publiques et abstraites, vous n'avez donc besoin que des signatures de méthode.Adjustable.java: Créez une autre interface qui définit ce que signifie pour un appareil d'être réglable. Un appareil réglable doit pouvoir définir son niveau. Déclarez une méthodesetLevel(int level). Incluez également une constanteMAX_LEVELavec une valeur de100— rappelez-vous que les constantes dans les interfaces sont implicitementpublic static final.Main.java: Démontrez que vos interfaces sont correctement définies en affichant des informations à leur sujet. Vous recevrez une entrée : une valeur de niveau (int). Affichez les trois lignes suivantes :Switchable methods: turnOn, turnOffAdjustable methods: setLevelMax level constant: [MAX_LEVEL value](accédez à la constante depuis l'interface Adjustable)
Setting level to: [input level]
Vous recevrez une entrée : une valeur de niveau (int).
Ce défi se concentre uniquement sur la définition d'interfaces — les plans qui décrivent les capacités. Dans la prochaine leçon, vous apprendrez comment les classes implémentent réellement ces interfaces pour fournir le comportement réel !
Aide-mémoire
Une interface est un contrat qui définit ce qu'une classe peut faire, sans spécifier comment elle le fait. Les interfaces ne contiennent que des signatures de méthodes sans implémentation.
Les interfaces sont déclarées en utilisant le mot-clé interface :
public interface Drawable {
void draw();
}Toutes les méthodes d'une interface sont implicitement public et abstract :
public interface Playable {
void play(); // implicitement public abstract
void pause();
void stop();
}Les interfaces peuvent déclarer des constantes, qui sont implicitement public static final :
public interface GameConstants {
int MAX_PLAYERS = 4; // implicitement public static final
}Une classe peut implémenter plusieurs interfaces, contrairement à l'extension de plusieurs classes.
Essayez vous-même
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int level = scanner.nextInt();
// TODO: Afficher des informations sur les interfaces
// Afficher : "Switchable methods: turnOn, turnOff"
// Afficher : "Adjustable methods: setLevel"
// Afficher : "Max level constant: " suivi de Adjustable.MAX_LEVEL
// Afficher : "Setting level to: " suivi du niveau saisi
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron Itérateur