Utilisation des interfaces

Description

Ce tutoriel explique l'utilité des interfaces, comment et pourquoi les créer, comment les appeler dans les classes.

Il s'adresse au débutants.

1. Qu'est ce qu'une interface ?


Une interface définit un ensemble de méthodes qu'une classe pourra implémenter. Toutes les méthodes d'une interface sont abstraites.
Les interfaces sont implémentées par des classes. Si une classe implémente une interface alors, la classe va définir l'ensemble des méthodes présentes dans l'interface.

2. Création d'une interface


Pour créer une interface, il suffit de créer un nouveau fichier java et d?écrire :
/** 
 * Exemple d'interface
 * 
 * @author julien 
 * @version 1.0 
 */
public interface NomInterface { 

    /** 
     * Definition d'une procedure 
     */
    public void methodeA(); 

    /** 
     * Definition d'une fonction 
     */
    public String methodeB(); 

    /** 
     * Definition d'une autre fonction 
     */
    public int methodeC(String a); 

}

3. Implémenter une interface


Les classes implémentant l?interface doivent redéfinir les méthodes de l?interface (selon les version du jdk, on peut placer l?annotation @Override avant ces méthodes pour préciser qu?elles définissent les méthodes d?une classe mère ou d?une interface). La classe sera donc écrite de la facon suivante, en précisant implements NomInterface :
/** 
 * Classe implémentant l'interface précédemment créée. 
 * Si on ne redéfinit pas la javadoc dans cette classe,  
 * la javadoc de l'interface sera automatiquement reprise. 
 */
public class ClasseA implements NomInterface { 

    public void methodeA(){ 
        //Traitement 
    } 
    
    public String methodeB(){ 
        //Traitement 
        return null; 
    } 
    
    public int methodeC(String a){ 
        //Traitement 
        return 0; 
    } 
} 


4. Utilité des interfaces
Les interfaces servent à définir un ensemble de méthodes que les classes filles doivent définir.
Les interfaces sont utiles pour réduire la dépendance entre classes. Par exemple, nous allons prendre l'interface List qui définit un certain nombre de méthodes présentes sur tous les types de listes (add, remove, etc.) voir http://download.oracle.com/javase/1.4.2/docs/api/j ava/util/List.html
Les classes LinkedList et ArrayList implémentent cette interface de deux manières différentes. Si nous voulons créer une classe ClasseExemple qui contient un attribut de type liste, nous pouvons le faire de cette façon
public class ClasseExemple{ 

     private ArrayList<String> liste; 

     public ClasseExemple(ArrayList<String liste){ 
          this.liste=liste; 
          liste.add("el1"); 
     } 

} 

Cette utilisation revient à dire : pour instancier cette classe j'ai besoin d'une instance de la classe ArrayList. La classe dépend donc directement de ArrayList
Par contre, la classe suivante n'a aucune dépendance avec ArrayList
public class ClasseExemple{ 

     private List<String> liste; 

     public ClasseExemple(List<String liste){ 
          this.liste=liste; 
          liste.add("el1"); 
     } 

} 

Cette utilisation revient à dire : pour instancier cette classe j'ai besoin d'une instance d'une classe qui possède les méthodes décrites dans la classe List (add en fait partie). De cette facon, la classe pourra être utilisée aussi bien avec des objets ArrayList que LinkedList

Un exemple concret de cette utilisation est l'interface Comparable, la méthode Collections.sort(Collection c) qui trie les objets d'une liste fonctionne avec toutes les collections de classes qui implémentent l'interface Comparable.
La classes collections.sort est donc utilisable avec toutes les collections contenant des éléments qui l'on peut comparer.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.