Programmation orienté objet :
Interface :
Description de contraintes imposées (pour l’essentiel) sous forme de signatures formelles de
méthodes :
- Résulte du processus de conception
- Analogie limitée avec les prototypes (langage C)
- Description via le mot clé interface
- Application via le mot clé implements
- Lien à la charge du programmeur
Règles de structuration :
- Fichier source avec définition complète de l’interface
- Une interface est un bloc ({---})
- Extension fichier source .java
- La compilation génère un fichier .class
- Règles d’accès et de visibilité identiques à celles des classes
- Règles syntaxiques identiques à celles des classes
Déclaration de l’interface (dans un fichier java à part)
Implémentation de l’interface dans une classe
public interface Figure {
public double perimetre ();
public double surface ();
}
public class Rectangle implements Figure {
…
public double perimetre () {…}
public double surface () {…}
…
}
Il s’agit d’une partie du modèle formel des classes qui l’implémentent. Une interface spécifie
un protocole pour ses classes utilisatrices.
Le protocole est défini par la signature de l’ensemble des méthodes de l’interface et/ou
par un ensemble de constantes applicatives.
Une interface peut avoir des attributs de classe (qui nécessiteront la spécification final,
obligatoire pour des constantes) mais une interface ne peut pas avoir d’attribut d’instance.
Elle peut également avoir des méthodes de classes et/ou d’instances mais elles devront être
abstraites.
Il est impossible qu’elle possède des méthodes privés ou protégées, elle n’est pas pour autant
forcément publique, elle peut être « amicale ».
Une interface ne permet pas d’implémenter une interface, elle est complétement abstraite.
Elle peut cependant s’étendre à une autre interface, on obtient alors la réunion de méthode
abstraites héritées et des méthodes abstraites locales.
Toutes les méthodes sont à surcharger, on ne peut donc pas utiliser le spécificateur final pour
ses méthodes, ni pour elle-même puisqu’elle est obligatoirement implémentable.
Elle peut définir des interfaces internes :
Interface X { interface Y { voidf();} }
public classZ implements X.Y {
Une interface ne possède pas de constructeurs et peut définir une classe interne à condition
d’utiliser le spécificateur static.