4. LA NOTION D'INTERFACE
 
 
Précédent Suivant
 
La notion d'interface
Méthodes et classes abstraites (1/2)
* Méthode abstraite
* Sans implémentation
* Mot-clé "abstract"
* Classe abstraite
* Ne peut pas être instanciée
* Mot-clé "abstract"
* Si elle possède au moins une méthode abstraite
* Automatiquement abstraite
* Mais le mot-clé reste obligatoire
* Classe abstraite pure
* N'a pas d'attributs
* Ne possède que des méthodes abstraites
* N'a qu'une interface, aucune implémentation
Méthodes et classes abstraites (2/2)
* Classe abstraite "Forme"
public abstract class Forme {
protected int x1;
protected int y1;
public Forme(int a,int b) { x1 = a; y1 = b; }
public abstract void tracer(java.awt.Graphics g);
}
* Classe concrète "Rectangle" héritant de "Forme"
public class Rectangle extends Forme {
protected int largeur;
protected int hauteur;
public Rectangle(int a,int b,int c,int d)
{ super(a,b); largeur = c; hauteur = d; }
public void tracer(java.awt.Graphics g)
{ g.drawRect(x1,y1,largeur,hauteur); }
}
* Instanciation
* new Forme(27,14) ==> erreur
* new Rectangle(27,14,3,86) ==> ok
Héritage: interface et implémentation
* Classe = interface + implémentation
* Interface = signature de la classe, partie visible
* Fonctionnalités fournies par la classe
* Signature des membres
* Implémentation = fonctionnement de la classe, partie cachée
* Comportement interne de la classe
* Corps / contenu des membres
* Quand on parle d'héritage, c'est implémentation + interface
* En Java, l'héritage multiple est interdit
* Héritage multiple d'implémentations interdit
* Héritage multiple d'interfaces autorisé
* Pourquoi interdire l'héritage multiple d'implémentations ?
* Souvent, il s'agit d'une erreur de conception
* Agrégation ou délégation souvent mieux adaptée
* C'est une source de conflit
* Héritage de deux membres avec le même nom ==> comment les distinguer ?
* Héritage de la même classe plusieurs fois ==> héritage virtuel en C++
Héritage multiple: un exemple
Héritage multiple: la délégation
Héritage multiple: les interfaces
Interfaces en Java (1/2)
* Interface ~ classe abstraite pure
* Déclaration d'une interface
* Mot-clé "interface"
* Pas de code, toutes les méthodes sont abstraites
* Le mot-clé "abstract" n'est pas nécessaire
* Pas d'attributs
* Constantes autorisées
* Exemple
public interface Composant {
...
public void tracer(java.awt.Graphics g);
...
}
Interfaces en Java (2/2)
* Héritage d'une interface ==> implémentation de l'interface
* Mot-clé "implements"
* Implémenter, donner un corps, à toutes ses méthodes
* Héritage multiple d'interfaces possible: class A implements B,C
* Héritage entre interfaces possible
* Mot-clé "extends"
* Pour le typage, l'interface a le même rôle qu'une classe
* Mécanisme de polymorphisme dynamique identique
* Exemple
public class Ligne extends Forme implements Composant {
protected int x2;
protected int y2;
public Ligne(int a,int b,int c,int d)
{ super(a,b); x2 = c; y2 = d; }
public void tracer(java.awt.Graphics g)
{ g.drawLine(x1,y1,x2,y2); }
}
 
 
Copyright (c) 1999-2016 - Bruno Bachelet - bruno@nawouak.net - http://www.nawouak.net
La permission est accordée de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License, Version 1.1 ou toute version ultérieure publiée par la fondation Free Software Foundation. Voir cette licence pour plus de détails (http://www.gnu.org).