# Les interfaces Les interfaces ne peuvent contenir que la signature des méthodes que nous utiliserons lors de leur implémentation. Elles permettent de créer des groupes de méthodes que plusieurs classes sans lien entre elles pourront utiliser si, elles ont la/les mêmes interfaces d'implémentées. Chaque classe pourra ensuite l'implémenter à sa façon. Les classes devront utiliser toutes les signatures de méthodes définies dans l'interface qu'elles implémentent. ### **Pour résumer:** Les interfaces servent à créer des comportements génériques: **si plusieurs classes doivent obéir à un comportement particulier**, on créé une interface décrivant ce comportement et on la fait implémenter par les classes qui en ont besoin. Ces classes devront ainsi obéir strictement aux méthodes de l'interface (nombre, type et ordre des paramètres, type des exceptions). Exemple : ``` // Interface // Sentences.java public interface Sentences { String gretting(String name); // Signature de méthode 1 String tellAge(int age); // Signature de méthode 2 } ``` ``` // Class Person (Person.java) public class Person implements Sentences { /** * Implémentation de la méthode 1 */ public String greeting(String name) { "Hello " + name + ", i'am a human !"; } /** * Implémentation de la méthode 2 */ public String tellAge(int age) { return "I am " + age +"." } } ``` ``` /** * Même chose avec la classe Robot, qui est une deuxième class fille. */ // Class Robot (Robot.java) public class Robot implements Sentences { public String greeting(name) { return "Hello " + name + ", I am a Robot !" } public String tellAge(age) { return "Oh, I am a verry old robot, I am " + age + " !"; } } ``` Lorsque l'on instancie ensuite la class, on a le choix de l'instancier avec le type de l'interface ou le type de la class (même principe que l'heritage). On va préferer globalement d'instancier avec le type le plus abstrait. L'objet aura seulement les methode disponibles dans l'interface et sera plus facile a utiliser comme parametre dans d'autres methodes. Exemple 1: ``` /** * robot ne comprend que les methodes de Sentences * Sentences robot = new Robot(); ``` Exemeple 2 : ``` /** * robot ne comprend les methodes de Sentences et de Robot * Robot robot = new Robot(); ``` Notes : * Une classe peut implémenter plusieurs interfaces. * Toutes les signatures sont public. ###### tags: `Java`