Académique Documents
Professionnel Documents
Culture Documents
Classe abstraite
C’est une classe qui ne peut pas être directement instanciée.
Elle sert comme une classe de base pour une dérivation
(héritage)
Une classe abstraite est déclarée avec le modificateur
abstract
Syntaxe :
abstract class nom_classe { … }
Une classe abstraite est une classe qui peut contenir une ou
plusieurs méthodes abstraites. Elle peut aussi contenir
des méthodes normales (méthodes concrètes)
Carré
9 Mohamed Aymen CHARRADA 27/11/2023
Classe abstraite
Sachant que toutes les formes possèdent les propriétés
périmètre et surface, il est judicieux de placer les
méthodes définissant ces propriétés dans la classe qui est à
la racine de l'arborescence (Forme)
La classe « Forme » ne peut cependant pas implémenter
ces deux méthodes car on ne peut pas calculer le périmètre
et la surface sans connaître le détail de la forme
On doit garantir l’implémentation de ces méthodes dans
chacune des sous-classes de la classe « Forme »
Il est possible de résoudre ce problème en déclarant dans la
classe « Forme » deux méthodes abstraites perimetre()
et surface() ce qui rend la classe « Forme » elle-même
10
abstraite et impose aux sous-classes de les implémenter
Mohamed Aymen CHARRADA 27/11/2023
} //Fin de Cercle
Classe abstraite
Public class Rectangle extends Forme
public abstract class Forme { { public double long, larg;
public abstract double perimetre(); public Rectangle (double long, double
public abstract double surface(); larg) {
}//Fin de Forme this.long = long;
public class Cercle extends Forme { this.larg = larg;
public static final double PI = 3.14; }
private double rayon; public double perimetre() {
public Cercle (double rayon) { return (2*(long+larg));
this.rayon = rayon; }
} public double surface() {
public double perimetre() { return (long*larg);
return (2*PI*rayon); }
} }//Fin de Rectangle
public double surface() {
return (PI*rayon*rayon);
}
11 Mohamed Aymen CHARRADA 27/11/2023
Classe abstraite
Les autres sous-classes (Carre, Triangle, ...) pourraient être
implémentées selon le même modèle
Même si la classe « Forme » est abstraite, il est tout de
même possible de déclarer un tableau de références de ce
type qui pourront recevoir des objets créés à partir des
sous-classes concrètes :
Forme [] DS = new Forme [3];
DS [0] = new Rectangle (2.5, 6.8);
DS [1] = new Cercle (4.66);
DS [2] = new Carre (2.7);
public interface I {
int a = 3; // a est implicitement une constante
void f () ; // f est implicitement publique et abstraite
public default void g () { … } //g est une fonction avec
//implémentation par défaut
implements
Classe C1 Classe C2 Classe C3
Implémentation de M1, Implémentation de M1, Implémentation de M1,
M2, M3 M2, M3 M2, M3
Problème :
La modification (ou l’ajout) d'une ou plusieurs méthodes de
(à) l’interface « I » oblige à adapter en conséquence toutes
les classes qui implémentent cette interface
Solution :
Utiliser les méthodes par défaut (default method) dans
l’interface
34 27/11/2023
Exercice 5 (suite)
Ecrire la classe « CompteDebit » qui hérite de la classe
« Compte » et qui admet un constructeur à deux arguments
De même, écrire la classe « CompteCredit » qui hérite de la
classe « Compte » et qui admet un constructeur à trois
arguments
Ecrire la classe principale « Test » où vous devez créer deux
comptes : « cmp1 » de type « CompteDebit » et « cmp2 » de
type « CompteCredit » puis appliquer sur ces deux comptes
des opérations de dépôt et de retrait
35 27/11/2023
Exercice 5 (suite)
Ecrire la classe « CompteDebit » qui hérite de la classe
« Compte » et qui admet un constructeur à deux arguments
De même, écrire la classe « CompteCredit » qui hérite de la
classe « Compte » et qui admet un constructeur à trois
arguments
Ecrire la classe principale « Test » où vous devez créer deux
comptes : « cmp1 » de type « CompteDebit » et « cmp2 » de
type « CompteCredit » puis appliquer sur ces deux comptes
des opérations de dépôt et de retrait
36 27/11/2023
Solution