Académique Documents
Professionnel Documents
Culture Documents
Introduction
Supposons qu’on veut modéliser les voitures et les motos
en Java → La solution est d’écrire deux classes : une pour
les voitures et une deuxième pour les motos
Mais, on se rend vite compte que les voitures et les motos
se partagent des propriétés (vitesse, marque, nb_places,
nb_roues…) et des comportements (accélérer, freiner…),
tout en ayant leurs propres spécificités (les voitures
nécessitent un permis de conduire, les voitures peuvent
marcher en arrière…)
Afin d’éviter de mentionner les propriétés et les
comportements partagés dans les deux classes, la solution
consiste à regrouper tout ce qui est partagé dans une seule
classe à créer (Classe véhicule par exemple)
Mohamed Aymen CHARRADA 23/10/2023
2
Introduction
Ainsi, les classes « voiture » et « moto » héritent, chacune,
de la classe « véhicule », les propriétés et les
comportements partagés
Par la suite, chaque classe rajoute de sa part la définition de
ses propres spécificités
Ce type de relations s’appelle l’héritage
(c’est l’une des notions fondamentales de
la POO)
class A { class A {
… … class A {
public A (int a, float b) { public void f (int a) { public int x;
… … …
} } }
} }
class B extends A {
class B extends A { class B extends A {
…
… …
public void f (int a, int b)
public B (int x,float y,int z) public void f ( ) {
{
{ …
…
super(x,y); int a = super.x;
super.f(a);
… …
…
} }
}
} }
ère
1 instruction du }
constructeur appelant Ici, l’utilisation du mot clé
9 Mohamed Aymen CHARRADA « super » est optionnelle 23/10/2023
L’accès aux propriétés héritées
Les attributs et méthodes définies avec le modificateur
d'accès « public » restent publiques à travers l'héritage
Les attributs et méthodes définies avec le modificateur
« private » sont bien héritées mais elles ne sont pas
accessibles directement dans la classe fille
Une classe fille peut accéder aux attributs ou aux méthodes
de sa classe mère qui sont déclarés « protected ». Un
attribut déclaré « protected » est accessible dans le
paquetage et dans les classes dérivées de sa classe
public float c;
class A {
void modifier (int a, int b, float c)
private int x; {
protected int y; x = a;
public double r; y = b;
this.c = c;
void affiche ( ) { }
System.out.println(x + ", "+ y); void affiche_B ( ) {
} affiche ( );
} // ou super.affiche ( );
System.out.println (r +","+ c);
}
Mohamed Aymen CHARRADA } 23/10/2023
12
Exemple 2
La classe fille et la classe mère ne sont pas dans le
même package
class B extends A {
public float c;
class B extends A {
public B(…) {
//appel de constructeur par défaut de A (optionnel)
super() ;
}
………
}
Appel du constructeur de « B » qui, à son
B b = new B(…); tour, appelle le constructeur par défaut
Mohamed Aymen CHARRADA
de « A »
15 23/10/2023
Construction et initialisation des objets dérivés
Cas2 : La classe fille ne définit aucun constructeur
ou elle définit un constructeur sans arguments
Dans ce cas, le constructeur par défaut/sans arguments de
la classe fille doit appeler :
Le constructeur par défaut de la classe mère si elle ne possède
aucun constructeur,
Le constructeur sans arguments de la classe mère si elle possède au
moins un,
Dans le cas où il n’ y a pas un constructeur sans arguments et il y a
d’autres constructeurs avec arguments dans la classe mère, le
compilateur génère une erreur
class B extends A {
//pas de constructeur
}
Appel du constructeur par défaut de « B »
B b = new B(); qui, à son tour, appelle le constructeur1
de « A »
class B extends A {
// pas de constructeur
}
On obtient une erreur de compilation car
« A » ne dispose pas d’un constructeur
B b = new B(); sans arguments et « B » utilise un
constructeur par défaut
class B extends A {
//pas de constructeurs
}
Appel de constructeur par défaut de « B »
B b = new B (); qui appelle le constructeur par défaut de
«A »
Carnivore Herbivore
B C* ✓ Classe A : Méthode « f » de « A »
✓ Classe B : Méthode « f » de « A »
✓ Classe C : Méthode « f » de « C »
D* E F
✓ Classe D : Méthode « f » de « D »
✓ Classe E : Méthode « f » de « A »
✓ Classe F : Méthode « f » de « C »
27 Mohamed Aymen CHARRADA 23/10/2023
Héritage et surcharge des méthodes
En Java, une méthode fille peut surcharger une méthode
d’une classe ascendante
Exemple :
class A A a , B b ;
{ int n; float x;
public void f (int n) {…} a.f(n); Appel de f(int) de A
… a.f(x); Erreur, pas de f(float)
} dans A