Java Interfaces et polymorphisme
Abstraction
On peut vouloir traiter des objets en utilisant les services qu’ils partagent :
for (int index =0;index <printers.length;index++)
printers[index].print(document);
On peut aussi vouloir écrire un programme en supposant que les objets
manipulés implémentent certains services :
boolean isSorted(Comparable[] array) {
for (int i= 0; i<array.length - 1; i++)
if (array[i].compareTo(array[i+1]) > 0) return false;
return true;
}
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 21 septembre 2016 69 / 171
Java Interfaces et polymorphisme
Description d’une interface
Description d’une interface en Java :
public interface Printer {
/**
* Affiche la chaine de caracteres document.
* @param document la chaine a afficher.
*/
public void print(String document);
}
Une interface :
▶peut contenir une ou plusieurs méthodes
▶est un contrat
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 21 septembre 2016 70 / 171
Java Interfaces et polymorphisme
Implémentation d’une interface
implements permet d’indiquer qu’une classe implémente une interface :
class SimplePrinter implements Printer {
void print(String document) {
System.out.println(document);
}
}
class BracePrinter implements Printer {
void print(String document) {
System.out.println("{"+document+"}");
}
}
Java vérie que toutes les méthodes de l’interface sont implémentées.
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 21 septembre 2016 71 / 171
Java Interfaces et polymorphisme
Références et interfaces
Déclaration d’une variable de type référence vers une instance d’une classe
qui implémente l’interface Printer :
Printer printer;
Il n’est pas possible d’instancier une interface :
Printer printer =new Printer(); // interdit !
printer.print("toto"); // que faire ici ?
Il est possible d’instancier une classe qui implémente une interface :
SimplePrinter simplePrinter =new SimplePrinter();
et de mettre la référence dans une variable de type Printer :
Printer printer1 =simplePrinter;// upcasting
Printer printer2 =new BracePrinter();
Printer string =new String("c")// interdit !
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 21 septembre 2016 72 / 171