Académique Documents
Professionnel Documents
Culture Documents
Une interface est un type de référence en Java. C'est similaire à la classe. C'est une collection
de méthodes abstraites. Une classe implémente une interface, héritant ainsi des méthodes
abstraites de l'interface.
Outre les méthodes abstraites, une interface peut également contenir des constantes, des
méthodes par défaut, des méthodes statiques et des types imbriqués. Les corps de méthode
existent uniquement pour les méthodes par défaut et les méthodes statiques.
L'écriture d'une interface est similaire à l'écriture d'une classe. Mais une classe décrit les
attributs et les comportements d'un objet. Et une interface contient des comportements qu'une
classe implémente.
Sauf si la classe qui implémente l'interface est abstraite, toutes les méthodes de l'interface
doivent être définies dans la classe.
Cependant, une interface est différente d'une classe de plusieurs manières, notamment -
Vous ne pouvez pas instancier une interface.
Une interface ne contient aucun constructeur.
Toutes les méthodes d'une interface sont abstraites.
Une interface ne peut pas contenir de champs d'instance. Les seuls champs
pouvant apparaître dans une interface doivent être déclarés à la fois static et
final.
Une interface n'est pas étendue par une classe ; elle est implémentée par une
classe.
Une interface peut étendre plusieurs interfaces.
Exemple
Voici un exemple d'interface -
/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements
Implémentation d'interfaces
Lorsqu'une classe implémente une interface, vous pouvez considérer la classe comme signant
un contrat, acceptant d'exécuter les comportements spécifiques de l'interface. Si une classe
n'exécute pas tous les comportements de l'interface, la classe doit se déclarer abstraite.
Une classe utilise le mot clé implements pour implémenter une interface. Le mot clé
implements apparaît dans la déclaration de classe à la suite de la partie extend de la
déclaration.
Exemple
/* File name : MammalInt.java */
public class MammalInt implements Animal {
// Filename: Football.java
public interface Football extends Sports {
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
// Filename: Hockey.java
public interface Hockey extends Sports {
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
L'interface Hockey a quatre méthodes, mais elle en hérite deux de Sports ; ainsi, une classe
qui implémente Hockey doit implémenter les six méthodes. De même, une classe qui
implémente Football doit définir les trois méthodes de Football et les deux méthodes de
Sports.
@Override
public String turnAlarmOff() {
// custom implementation
}
Nous pouvons également faire en sorte que notre classe utilise les méthodes par
défaut de l'une des interfaces.
Voyons un exemple qui utilise les méthodes par défaut de l' interface Vehicle :
@Override
public String turnAlarmOn() {
return Vehicle.super.turnAlarmOn();
}
@Override
public String turnAlarmOff() {
return Vehicle.super.turnAlarmOff();
}
De même, nous pouvons faire en sorte que la classe utilise les méthodes par
défaut définies dans l' interface Alarm :
@Override
public String turnAlarmOn() {
return Alarm.super.turnAlarmOn();
}
@Override
public String turnAlarmOff() {
return Alarm.super.turnAlarmOff();
}
Il est même possible de faire en sorte que la classe Car utilise les deux
ensembles de méthodes par défaut :
@Override
public String turnAlarmOn() {
return Vehicle.super.turnAlarmOn() + " " + Alarm.super.turnAlarmOn();
}
@Override
public String turnAlarmOff() {
return Vehicle.super.turnAlarmOff() + " " + Alarm.super.turnAlarmOff();
}