Académique Documents
Professionnel Documents
Culture Documents
les interfaces
AU 2016 - 2017
Définition : classes abstraites
Une classe abstraite est une classe qui ne permet pas d’instancier des
objets, elle ne peut servir que de classe mère pour une dérivation.
Dans une classe abstraite, on peut trouver des attributs et des méthodes,
dont héritera toute classe dérivée, et on peut trouver des méthodes «
abstraites ».
Syntaxe:
2
Meriem AZAIEZ-Programmation Orientée Objets
Définition : méthodes abstraites
Syntaxe:
Une méthode abstraite doit être absolument redéfinie dans une sous classe
pour pouvoir être utilisée.
Une méthode abstraite ne peut pas être déclarée static, private ou final.
Car elle est destinée à être redéfinie dans une classe dérivée.
3
Meriem AZAIEZ-Programmation Orientée Objets
Règles des classes abstraites
Une classe qui définit au moins une méthode abstraite doit être
obligatoirement déclarée abstraite.
Une classe dérivée d’une classe non abstraite peut être déclarée abstraite.
Une classe dérivée d’une classe abstraite n’est pas obligée de redéfinir
toutes les méthodes abstraites, elle peut ne redéfinir aucune, mais elle
reste abstraite tant qu’il y a encore des méthodes abstraites non
implémentées.
On ne peut pas instancier une classe abstraite car au moins une de ses
méthodes n’a pas d’implémentation. Mais on peut:
Déclarer des références du type de la classe abstraite.
Créer un tableau des références du type de la classe abstraite.
4
Meriem AZAIEZ-Programmation Orientée Objets
Règles des classes abstraites
abstract class A {
public void f() {…} //f est définie dans A
public abstract void g(int n); //g est une méthode
abstraite elle n’est pas définie dans A
}
class B extends A {
public void g(int n) {
//implémentation de g
}
}
6
Meriem AZAIEZ-Programmation Orientée Objets
Intérêt des classes abstraites
class A { }
class B extends A {
public void m() { … }
} A a = new B();
a.m(); //Erreur car m()
n’est pas définie dans A
abstract class A {
public abstract void m();
}
class B extends A {
public void m() { … }
} A a = new B();
a.m(); //Juste
7
Meriem AZAIEZ-Programmation Orientée Objets
Exemple 1
Forme
Cercle Rectangle
Une interface est une classe abstraite ne contenant que des méthodes
abstraites et/ou des attributs constants.
Syntaxe:
9
Meriem AZAIEZ-Programmation Orientée Objets
Les interfaces
interface I {
public static final int CONST = 2;
public abstract void f(int n);
void g();
}
Si une classe hérite d’une autre classe elle peut également implémenter
une ou plusieurs interfaces.
Elle peut même ré-implémenter une interface déjà implémentée par la classe
mère.
class A implements Inter1 { … }
class B extends A implements Inter1,Inter2 { … }
C’est une solution partielle pour l’héritage multiple, interdit en Java, avec
l’obligation d’implémenter les méthodes correspondantes.
11
Meriem AZAIEZ-Programmation Orientée Objets
Implémentation d’une interface
12
Meriem AZAIEZ-Programmation Orientée Objets
Exemple 2
On souhaite:
Implémenter une méthode « afficher » pour les classes filles.
Cette méthode n’est pas définie dans la classe « Type ».
Type
13
Meriem AZAIEZ-Programmation Orientée Objets
Règles des interfaces
Les interfaces servent à faire du polymorphisme avec des objets dont les
classes n’appartiennent pas à la même hiérarchie d’héritage.
14
Meriem AZAIEZ-Programmation Orientée Objets
Règles des interfaces
interface I { … }
class A implements I { … }
I i1; //Juste
I i2 = new I(); //Erreur
I i3 = new A(); //Juste
15
Meriem AZAIEZ-Programmation Orientée Objets
Règles des interfaces
Les méthodes de l’interface mère sont reprises dans les interfaces filles.
Toute classe qui implémente l’interface fille doit donner une implémentation
à toutes les méthodes mêmes celle héritées.
16
Meriem AZAIEZ-Programmation Orientée Objets
Règles des interfaces
interface I1 { interface I2 {
void m1(); void m2();
static final int v1 = 10; static final int v2 = 20;
} }
17
Meriem AZAIEZ-Programmation Orientée Objets
Conflits des noms
interface I1 { interface I2 {
void m1(); void m1();
void m2(); int m2();
void m3(int x); void m3();
} }
Les classes :
Sont complètement implémentées.
Une seule autre classe peut en hériter.
Les classes abstraites :
Sont partiellement implémentées.
Une autre classe non abstraite peut en hériter mais doit donner une
implémentation à toutes les méthodes abstraites.
Une autre classe abstraite peut en hériter sans forcément donner une
implémentation à toutes les méthodes abstraites.
Ne peuvent pas être instanciées mais peuvent fournir un constructeur.
Les interfaces :
Ne contiennent pas de constructeur.
Ne sont pas implémentées.
Toute classe qui implémente une ou plusieurs interfaces doit implémenter
toutes leurs méthodes (abstraites).
19
Meriem AZAIEZ-Programmation Orientée Objets