Si on considère une classe abstraite qui ne décrit que des méthodes abstraites (aucun attribut, aucune méthode implémentée), on aboutit à la notion d’interface.
Une interface décrit les signatures d’un certain nombre de méthodes, et possiblement aussi de constantes, dont on souhaite imposer l’existence dans certaines classes ;
Exemple :
// une interface IMovable qui décrit les comportements d'un objet déplaçable public interface IMovable { public void moveTo (Point position); public void moveTo (int x_position, int y_position); }
Usage :
// En implémentant l’interface IMovable, la classe Rectangle doit nécessairement // implémenter et définir le contenu des méthodes inscrites dans l’interface IMovable public class Rectangle implements IMovable { public void moveTo (Point position) { ... } public void moveTo (int x_position, int y_position) { ... } }
Cela ressemble beaucoup à une hybridation entre :
Pourtant, ce n’est ni vraiment l’un, ni vraiment l’autre.
Exemple : en Java, typer une donnée List (qui est une Interface disponible dans le JDK) permet d’accepter différentes sortes de collections (celles qui implémentent List) et de les traiter indistinctement par le fait que les fonctionnalités de base de ces collections sont les mêmes.