Fatma ELLOUZE Cours Programmation Orientée Objet POO
Chapitre 4
Classes abstraites et interfaces
129
Cours Programmation Orientée Objet POO
Objectifs
• Maitriser les classes abstraites
• Maitriser les interfaces
• Maitriser les différences entre les classes
abstraites et les interfaces
Fatma ELLOUZE
130
Cours Programmation Orientée Objet POO
Classes et méthodes abstraites
• Une méthode abstraite est une méthode qui ne
contient pas de corps. Elle possède simplement
une signature de définition suivie du caractère
point-virgule (pas de bloc d'instructions).
• Une classe abstraite est une classe qui ne peut
pas être instanciée. Elle peut contenir des
méthodes abstraites et des méthodes habituelles
(appelée parfois méthodes concrètes).
• Une méthode abstraite doit obligatoirement être
déclarée avec le modificateur abstract.
Fatma ELLOUZE
• Exemple : public abstract double surface();
131
Cours Programmation Orientée Objet POO
public class Chien extends Animal {
public abstract class Animal { // attributs et méthodes
void crier() {
// attributs et méthodes System.out.println("Ouah-Ouah !") ; }
}
Fatma ELLOUZE
public abstract void crier() ; public class Chat extends Animal {
// attributs et méthodes
} void crier() {
System.out.println("Miaou-Miaou !") ;}
} 132
Cours Programmation Orientée Objet POO
Animal animal1 = new Chien() ;
Animal animal2 = new Chat() ;
animal1.crier() ;
animal2.crier() ;
Le premier animal crie "Ouah-Ouah !" ; le second, "Miaou-Miaou !".
• Utilité
• - Définir des méthodes incomplets, qui devront être implémentés
dans les sous-classes.
Fatma ELLOUZE
• - Factoriser le code.
133
Fatma ELLOUZE Cours Programmation Orientée Objet POO
• En Eclipse:
134
Ce qu'il faut retenir sur les classes
Cours Programmation Orientée Objet POO
abstraites (1/2)
• Avec les classes abstraites, vous devez vous rappelez ceci :
• une classe est définie comme abstraite avec le mot clé
abstract.
• Une classe abstraite ne peut pas être instanciée.
• Une classe abstraite n'est pas obligée de contenir de
méthode abstraite.
• Si une classe contient une méthode abstraite, cette classe
doit alors être déclarée abstraite.
• Une méthode abstraite n'a pas de corps.
Fatma ELLOUZE
• Les classes abstraites sont à utiliser lorsque qu'une classe
mère ne doit pas être instanciée.
135
Ce qu'il faut retenir sur les classes
Cours Programmation Orientée Objet POO
abstraites (2/2)
• Une sous-classe d'une classe abstraite ne peut être
instanciée que si elle redéfinit chaque méthode abstraite
de sa classe parente et qu'elle fournit une implémentation
(un corps) pour chacune des méthodes abstraites. Une telle
sous-classe est souvent appelée sous-classe concrète.
• Les méthodes déclarées avec l'un des modificateurs static,
private ou final ne peuvent pas être abstraites étant donné
qu'elles ne peuvent pas être redéfinies dans une sous-
classe.
Fatma ELLOUZE
• Une classe déclarée final ne peut pas contenir de méthodes
abstraites car elle ne peut pas être sous-classée.
136
Cours Programmation Orientée Objet POO
Interfaces : Définition (1/2)
• Une interface est un ensemble de constantes et
de déclaration de méthodes abstraites
(implicitement).
public interface MonInterface {
public void meth();}
Fatma ELLOUZE
En Eclipse
137
Cours Programmation Orientée Objet POO
Interfaces : Définition (2/2)
• En Java, une classe ne peut hériter que d'une
et d'une seule classe parente (héritage
simple). Par contre, elle peut implémenter une
ou plusieurs interfaces en utilisant la syntaxe
suivante :
class NomClasse implements interface1[, interface2]
• L’héritage multiple n’existe pas en JAVA!
• Les interfaces permettent de mettre en œuvre un
Fatma ELLOUZE
mécanisme de remplacement.
138
Cours Programmation Orientée Objet POO
Exemple 1
public interface Affichage {
public void afficher();
}
public class Point implements Affichage{
public void afficher() {
System.out.println("C'est un point");
}
}
public class Losange implements Affichage{
Fatma ELLOUZE
public void afficher() {
System.out.println("C'est un losange");
}
} 139
Cours Programmation Orientée Objet POO
Rôles des interfaces
• 1. Conceptuel : factoriser un comportement commun entre
plusieurs classes différentes.
• Ce comportement est représenté par un ensemble de méthodes.
• - Exemple 1 : interface Dessinable qui contient les méthodes
dessiner2D(), dessiner3D(),… (factorisée entre tous les objets
dessinables (Cercle, Maison…)
• - Exemple 2 : interface Vehicule qui contient les méthodes rouler(),
freiner(),..(factorisée entre tous les objets qu’on peut véhiculer
(vélo, voiture, train…)
• 2. Technique : obliger le développeur à implémenter toutes les
méthodes définies dans l’interface. Ainsi, il doit respecter la
signature de ces méthodes
Fatma ELLOUZE
• Aussi, utile pour la programmation à plusieurs (i.e, travail
collaboratif). Ex : affich, affiche(), afficher()…
140
Cours Programmation Orientée Objet POO
Utilité
• Les interfaces sont utiles car elles fournissent des
contrats que les objets peuvent utiliser pour fonctionner
ensemble sans avoir besoin de se connaître. L'intérêt des
interfaces n'est pas de vous aider à vous souvenir de la
méthode à mettre en œuvre, c'est ici de définir un
contrat.
• L'un des atouts majeurs — pour ne pas dire l'atout
majeur — de la programmation orientée objet est
la réutilisabilité de vos objets. Il est très commode
d'utiliser un objet (voire une architecture) que nous
Fatma ELLOUZE
avons déjà créé pour une nouvelle application.
141
Cours Programmation Orientée Objet POO
Héritage pour les interfaces
• Contrairement aux classes, une interface peut posséder
plusieurs interfaces parentes (héritage multiple).
public interface MonInterface extends TonInterface, SonInterface {...}
• Une classe qui implémente une sous-interface doit
implémenter les méthodes abstraites définies
directement par l'interface ainsi que les méthodes
abstraites héritées de toutes les interfaces parentes de
la sous-interface.
• Une interface ne peut pas implémenter une autre
interface. Seules les classes peuvent implémenter des
Fatma ELLOUZE
interfaces.
142
Cours Programmation Orientée Objet POO
Exemple 2
public interface MonInterface
{ int MAX=200;
public void f(); }
• MAX considérée comme final variable (ne
peut être modifiée.)
• Une interface ne peut pas avoir de méthode
static.
Fatma ELLOUZE
143
Cours Programmation Orientée Objet POO
Exemple 2
• Voici une classe qui implante cette interface:
class MonClass implements MonInterface{
public void f() { // Implementation de f()
System.out.println("Ok Interface ");
}}
class Test{
public static void main(String args[]){
MonClass o = new MonClass();
Fatma ELLOUZE
o.f(); Résultat: Ok Interface
System.out.println(o.MAX); } } 200
144
Fatma ELLOUZE Cours Programmation Orientée Objet POO
l’interprète
comme ceci
Le compilateur
145
Cours Programmation Orientée Objet POO
Implémenter plusieurs interfaces au même temps
• Des conflits de noms (collision) peuvent se
produire lorsqu'une classe implémente
plusieurs interfaces comportant des noms de
méthodes ou de constantes identiques.
• •Il faut distinguer plusieurs situations
Fatma ELLOUZE
146
Cours Programmation Orientée Objet POO
Situation 1 : Plusieurs méthodes portent des signatures
identiques
• Dans ce cas, Pas de problème, la classe doit implémenter
cette méthode
Fatma ELLOUZE
147
Cours Programmation Orientée Objet POO
Situation 2 : Mêmes noms de méthodes mais
profils de paramètres différents
• Implémentation de deux ou plusieurs méthodes surchargées
Fatma ELLOUZE
148
Situation 3 : Mêmes noms de méthodes, profils de
Cours Programmation Orientée Objet POO
paramètres identiques, mais types des valeurs de
retour différents
• Pas possible d'implémenter les deux interfaces (cela
provoquera une erreur à la compilation : Interface Collision)
Fatma ELLOUZE
149
Cours Programmation Orientée Objet POO
Situation 4 : Noms de constantes identiques
dans plusieurs interfaces
• Doivent être accédées en utilisant la notation
qualifiée (Interface.Constante)
Fatma ELLOUZE
150
Ce qu'il faut retenir sur les interfaces
Cours Programmation Orientée Objet POO
• Une interface est une classe 100 % abstraite.
• Toutes les méthodes d'une interface n'ont pas de corps.
• Une interface s'implémente dans une classe en utilisant
le mot clé implements.
• Vous pouvez implémenter autant d'interfaces que vous
voulez dans vos classes.
• Vous devez redéfinir toutes les méthodes de l'interface
(ou les interfaces) dans votre classe.
• L'ordre des déclarations est PRIMORDIAL : Lorsqu’une
classe, à la fois, hérite d’une autre classe et implémente
Fatma ELLOUZE
une interface: vous DEVEZ mettre l'expression
d'héritage AVANT l'expression d'implémentation,
SINON votre code ne compilera pas !
152
Cours Programmation Orientée Objet POO
Exercice
• Soit l’interface suivante:
• Ecrire les deux classes « Rectangle » et «
Cercle » qui implémente l’interface « Forme »
Fatma ELLOUZE
153