Chapitre n3 POO
Chapitre n3 POO
Chapitre n3 POO
Chapitre n°3
Héritage en Java
I) Généralités
L'héritage est le troisième des paradigmes de la programmation orientée objet (le 1er étant
l'encapsulation, le 2e la structure de classe).
L'emploi de l'héritage conduit à un style de programmation par raffinements successifs et permet
une programmation incrémentielle effective.
L'héritage peut être simple ou multiple (en java simple).
L'héritage est mis en œuvre par la construction de classes dérivées.
L’héritage une relation de spécialisation/généralisation.
Les éléments spécialisés héritent de la structure et du comportement des éléments plus
généraux (propriétés, associations et autres héritages)
Exemple :
Par héritage d’Article, un livre a d’office un prix, une désignation et une opération acheter (), sans qu’il soit
nécessaire de le préciser.
Intérêt de l’héritage
vision descendante => la possibilité de reprendre intégralement tout ce qui a déjà été fait et de pouvoir
l'enrichir.
vision ascendante => la possibilité de regrouper en un seul endroit ce qui est commun à plusieurs.
1
Professeur : Anasri Ahmed POO avec JAVA
Chapitre n°3
II) Héritage en Java
class Livre extends Article {
...
}
Remarque : Le mot clé extends en Java n’a rien à voir avec le mot clé extends en UML, employé en
particulier dans les diagrammes de cas d’utilisation.
Exemple :
Une classe B qui hérite d’une classe A est une sous-classe de A, et A est la super-classe de B.
La classe java.lang.Object est la super-classe de toutes les classes Java, directement ou
indirectement
revanche, une classe parent ne peut accéder à ses classes enfant. Lorsque l'on définit une hiérarchie de
classes, on cherche donc à répartir les méthodes les plus générales sur les classes parent, et les méthodes
les plus spécialisées sur les classes enfant. Ce que l'on appelle "sous-classe" correspond en fait aux
Si un attribut d'une classe enfant porte le même nom qu'un attribut d'une classe parent, alors l’attribut
enfant masque l’attribut parent. Par défaut, le code de la classe enfant accède à l’attribut enfant. En
revanche, le code de la classe parent accède à l’attribut de sa classe. Il est possible pour un code de la
2
Professeur : Anasri Ahmed POO avec JAVA
Chapitre n°3
Exemple :
3
Professeur : Anasri Ahmed POO avec JAVA
Chapitre n°3
Constructeur
La classe dérivée doit prendre en charge la construction de la classe de base.
Pour construire un Avion, il faut construire d'abord un Véhicule ;
Le constructeur de la classe de base (Véhicule) est donc appelé avant le constructeur de la classe dérivée
(Avion).
Si un constructeur de la classe dérivée appelle explicitement un constructeur de la classe de base, cet appel
doit être obligatoirement la première instruction de constructeur. Il doit utiliser pour cela, le mot clé super
Exemple
class A { int i;
// Constructeur de la classe A
public A(int x){ i = x; } }
// Héritage
class B extends A { double z;
// Constructeur de la classe B
public B(int f, double w) {
// Appel explicite du constructeur de A et en 1 ère ligne.
super(f); z = w; } }
Lors de la construction de la classe dérivée, nous devons tenir compte de la présence du constructeur dans
la classe de base et/ou dans la classe dérivée.
Remarque :
1) La classe de base et la classe dérivée ont au moins un constructeur public, c’est le cas général. De ce fait,
le constructeur de la classe dérivée doit appeler le constructeur de la classe de base disponible.
2) La classe de base n’a aucun constructeur. La classe dérivée peut ne pas appeler explicitement le
constructeur de la classe de base. Si elle le fait, elle ne peut appeler que le constructeur par défaut, vu que
c’est le seul qui est disponible dans ce cas dans la classe de base.
3) La classe dérivée ne possède aucun constructeur. Dans ce cas, la classe de base doit avoir un
constructeur public sans argument (par défaut ou un explicite).
Droits d'accès
Les droits d'accès protègent les données et les méthodes, et réalisent aussi l'encapsulation.
Les droits d'accès sont accordés aux fonctions membres, ou aux fonctions globales.
L'unité de protection est la classe : tous les objets de la classe bénéficient de la même protection.
un membre public est accessible à toutes les classes,
un membre «rien» est accessible à toutes les classes du même paquetage,
un membre private n'est accessible qu'aux fonctions membre de la classe.
4
Professeur : Anasri Ahmed POO avec JAVA
En résumé :