Vous êtes sur la page 1sur 17

Chapitre 3

L’héritage

Cours Programmation Orientée Objets

2020/2021

Anis HAJ SAID – anishajsaid@isima.u-monastir.tn


Introduction


L’héritage est le deuxième grand concept de la POO
après l’encapsulation (le fait de regrouper des attributs et
des méthodes dans une même entité appelée classe)

L’objectif de l’héritage est :
– de mieux représenter le monde réel
– de mettre en évidence les relations qui peuvent exister
entre des classes
– de simplifer le code
– De raisonner de sorte à détecter des classes
génériques et des classes spécifques.

2
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Introduction


Une classe B hérite d’une classe A implique que la classe B
aura par défaut les mêmes attributs et méthodes de la classe A.

On dit que la classe B hérite les attributs et les méthodes de la
classe A.

La classe B est appelée
– Une classe flle de A, ou aussi
– Une classe dérivée de A.
– On dit aussi que la classe B étend la classe A.

La classe A est appelée
– La classe mère de B, ou aussi
– La super-classe de B.
3
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Introduction


Une classe ne peut hériter que d’une seule classe
⇒ Il n’y a pas d’héritage multiple dans Java (Il existe une
solution pour remédier à cette contrainte qui est
l’utilisation des interfaces (voir chap.5).


Il peut y avoir un héritage en cascade, ou écritures des
sous-classes
⇒ La classe B hérite de la classe A, et la classe C hérite
de la classe B. Donc, la classe C hérite les attributs et les
méthodes de la classe A à travers la classe B

4
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Introduction


Attention
→ Les constructeurs ne sont pas hérités.
→ Chaque classe doit défnir ses propres constructeurs
→ Il est possible de faire appel aux constructeurs de la classe
mère (pour initialiser les attributs hérités) en utilisant le mot clé
super et en précisant les paramètres à envoyer
Exemple :
public Etudiant(String nom, String prenom, String CIN, String nInscri){
super(nom,prenom,CIN) ;
this.nInscription=nInscri ;
}
/* nom, prenom, CIN sont des attributs hérités de la classe mère
Personne ; nInscription est un attribut de la classe Etudiant. La classe
mère Personne possède un constructeur Personne(String,String,String)*/
5
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Déclaration de l’héritage


La déclaration de l’héritage s’efectue en utilisant le mot
clé extends
exemple :
class Etudiant extends Personne{
………
………
}

Cette déclaration implique que la classe Etudiant héritera
tous les attributs et les méthodes de la classe Personne.

Le mot clé super utilisée dans la classe flle Etudiant fait
référence à la classe mère Personne.
6
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Accessibilité


La classe flle aura accès à toutes les méthodes et attributs hérités de la classe mère
qui sont déclarés publiques ou protégés (public ou protected).
Exemple :
class A{ class B extends A{
public int a ; private int d ;
protected int b ; ………
private int c ; public void affectation(){
……… this.a=5 ;//OK
} this.b=6 ;//OK
this.c=7 ;//Erreur super.setC(7) ;
this.d=8 ;//OK
}

L’attribut « c » est privé, il n’est pas accessible par la classe flle B

7
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Accessibilité


Il faut bien choisir le niveau de visibilité (ou accessibilité)
des attributs et des méthodes de la classe mère.


Penser à rendre les attributs et les méthodes privés
destinés à être héritable comme étant protected.


Ça n’a pas trop de sens qu’une classe hérite un attribut
mais qui ne peut l’accéder. La déclaration des attributs de
la classe mère comme private est utilisée dans des cas
très particuliers

8
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Override des méthodes


Forme de polymorphisme dans la POO

Appelée aussi
– Redéfnition de méthodes ou aussi
– Réécriture de méthodes


Il s’agit de défnir dans une classe flle un nouveau code
pour une méthode héritée.


La méthode réécrite dans la classe flle possède la même
entête que celle dans la classe mère (type de retour,
identifant et nombre et type de paramètres dans l’ordre)
9
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Override des méthodes


Exemple 1 :
class A{

public int somme(int a, int b){
return(a+b) ;
}
….
}
class B extends A {
int z ;

public int somme(int x, int y){
int s=0 ;
s=x+y+this.z ;
return(s) ;
}

}
10
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Override des méthodes


Exemple 2 :
class A{

public int somme(int a, int b){

return(a+b) ;

}
….
}

class C extends A {

public void somme(int x, int y){

System.out.println(x+y) ;

}
}
11
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Override des méthodes


Accès aux méthodes de la classe mère
- Même en cas de redéfnition d’une méthode, la méthode de la classe mère
reste toujours accessible par la classe flle en utilisant
super.méthode(<paramètres>)

class A{ class C extends A {


… …
public int somme(int a, int b) public void somme(int x, int y)
{ {

return(a+b) ; int s = super.somme(x,y) ;


System.out.println(s) ;
}
…. }
} }

12
Polymorphisme en Java


Il existe deux principales formes de
polymorphisme en Java :

– Surcharge (redéfnition, overload) de méthodes


– Réécriture (override) de méthodes

13
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Surcharge de méthodes


La surcharge de méthodes s’applique aux constructeurs
et aux méthodes d’une classe, y compris aux méthodes
statiques.


Plusieurs méthodes peuvent porter le même nom, sous
condition que le nombre et le type de leurs arguments
permettent au compilateur d’efectuer son choix.


Une méthode surchargée → Il existe au moins 2 méthodes
ayant le même nom, mais diférent soit par les types des
arguments soit par leurs nombres.

14
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Surcharge de méthodes (overload)

L’écriture de plusieurs constructeurs dans une classe est


en fait une surcharge du constructeurs
class Point{
private int x , int y ;
public Point(){
this.x=0 ;
this.y=0;
}
public Point(int a, int b){
this.x=a ;
this.y=b ;
}
}
15
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Surcharge de méthodes (overload)

class A{

public int somme(int a, int b){
return(a+b) ;
}
public double somme(double x, int y{
System.out.println(x+y) ;
}
public int somme(int[] tab){
int s=0
for(int i=0;i<tab.length ;i++)
s=s+tab[i] ;
return s ;
}
}
16
Institut Supérieur d’Informatique de Mahdia Anis Haj Said (anishajsaid@isima.u-monastir.tn)
Résumé du chapitre


Une classe peut hériter d’une autre classe (d’une seule).

l’héritage consiste à hériter les attributs et les méthodes.

Une classe qui hérite est appelée une classe flle, la classe qui donne
l’héritage est appelée classe mère

La classe flle doit écrire ses propres constructeurs

Les constructeurs de la classe mère sont accessibles par la classe flle
avec l’instruction super(<paramètres>)

La classe flle peut redéfnir ou réécrire (override) les méthodes héritées
de la classe mère.

La classe flle reste en mesure d’utiliser les méthodes de la classe mère
en utilisant super.nom_méthode(<paramètres>) ;

Une classe peut surcharger (overload) une méthode qui lui est propre ou
héritée. Il s’agit d’écrire une méthode ayant le même nom mais avec
des paramètres diférents.
17

Vous aimerez peut-être aussi