0% ont trouvé ce document utile (0 vote)
2 vues50 pages

Cours Java Héritage

Le document traite de l'héritage en Java, un principe de la programmation orientée objet permettant à une classe d'hériter des attributs et méthodes d'une autre classe. Il explique les concepts de classe mère et classe fille, ainsi que les notions de redéfinition et de surcharge des méthodes. Le polymorphisme est également abordé, soulignant son importance pour l'extension des programmes sans modification du code existant.

Transféré par

aharram.lamiae
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues50 pages

Cours Java Héritage

Le document traite de l'héritage en Java, un principe de la programmation orientée objet permettant à une classe d'hériter des attributs et méthodes d'une autre classe. Il explique les concepts de classe mère et classe fille, ainsi que les notions de redéfinition et de surcharge des méthodes. Le polymorphisme est également abordé, soulignant son importance pour l'extension des programmes sans modification du code existant.

Transféré par

aharram.lamiae
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Héritage

100
Notions de POO en Java

Que pensez vous de classes suivantes ?

101
L’héritage en Java

Généralisation
Spécialisation

102
L’héritage en Java

103
L’héritage en Java

Définition
• Le terme héritage désigne le principe selon lequel une classe peut
hériter des caractéristiques (attributs et méthodes) d’autres classes.

• Grâce à l'héritage, une classe peut disposer immédiatement de


toutes les fonctionnalités d'une classe existante.

• Pour raccourcir les temps d’écriture et de mise au point du code d’une


application, il est intéressant de pouvoir réutiliser du code déjà écrit.

Exemple : Héritage, Agrégation ou Utilisation


➢ Salle de bains et Baignoire ? Agrégation
➢ Piano et Joueur de piano ? Utilisation
➢ Personne, Enseignant et Étudiant ? Héritage 104
Réutilisation par l'héritage

Notion d’héritage
 L’héritage existe dans tous les langages [Link] permet d’écrire une classe B:

➢ qui se comporte dans les grandes lignes comme la classe A.

➢ mais avec quelques différences sans toucher au code source de A.

 On a seulement besoin du code compilé de A


 Le code source de B ne comporte que ce qui a changé par rapport au code de
A

 On peut par exemple:

➢ ajouter de nouvelles méthodes

➢ modifier certaines méthodes


 La classe A s'appelle une classe mère, classe parente ou super-classe
105

 La classe B qui hérite de la classe A s'appelle une classe fille ou sous-classe


Héritage en java

106
L’héritage en Java

107
Exemple d’héritage en Java - classe mère

Exemple d’héritage
public class Personne {
protected String Nom, Prenom; //
protected int age;

// La classe contient des constructeurs,


// des méthodes getNom(), setNom(String )
// getPrenom(), getAge(),
// setPrenom(String), setAge(int),
...
public void Afficher ()
{ [Link](‘’nom : ‘’+Nom+‘’ Prenom : ‘’+Prenom+‘’Age : ‘’+Age);
}
} 108
Exemple d’héritage en Java - classe fille

exemple d’héritage(suite)
public class Etudiant extends Personne {
private int cne; // nouvelle variable
// Constructeurs
...
// Nouvelles Méthodes
public getCne() { return [Link]; }
public setCne(int Cne) { [Link]= Cne; }

// Méthodes modifiées
public void Afficher() {// redéfinition de Afficher()
[Link]();// appel de la méthode afficher de la classe mère
[Link](‘’ CNE: ‘’+cne);
} 109

}
L’héritage en Java
Notion d’héritage
 En Java, chaque classe a une et une seule classe mère (pas d’héritage
multiple) dont elle hérite les variables et les méthodes.

 Le mot clef extends indique la classe mère :

class Etudiant extends Personne


 Par défaut une classe hérite de la classe Object.
 La classe qui hérite peut:
➢ ajouter des variables, des méthodes et des constructeurs
➢ redéfinir des méthodes (exactement les mêmes types de
paramètres)
➢ surcharger des méthodes (même nom mais pas même signature)
(possible aussi à l’intérieur d’une classe)
110
L’héritage en Java
Notion d’héritage

Exercice : Proposer une modélisation en classe, puis une implémentation en java en


profitant de l’héritage

Vendeur Avocat EnseignantPermanant EnseignantVacataire


NumSecu NumSecu NumSecu NumSecu
Nom Nom Nom Nom
NomDuStand AdresseCabinet Spécialité Spécialité
Anciennté NbrAffaires NbrCours NbrCours
NumBureau NbeVacation
+ Afficher() + Afficher()
+ Afficher() + Afficher()

111
L’héritage en Java
Correction: Diagramme de classes

112
L’héritage en Java
Correction: en JAVA ( 3 classes)

113
L’héritage en Java

114
L’héritage en Java

115
116
Principe important lié à la notion d’héritage

Notion d’héritage
 Si « B extends A », le grand principe est que tout B est un A
 Par exemple:
➢ un étudiant est une personne;
➢ un poisson est un animal ;
➢ une voiture est un véhicule

B est un sous-type de A si on peut ranger une expression de type B dans une


variable de type A.
 Les sous-classes d’une classe A sont des sous types de A.
 En effet, si B hérite de A, tout B est un A donc on peut ranger un B dans une
variable de type A

Par exemple,
117

A a = new B(…); est autorisé


Pas d’héritage multiple en java

118
Héritage sur plusieurs niveaux

119
Héritage sur plusieurs niveaux

120
Encapsulation en JAVA

Encapsulation en JAVA

121
La visibilité en Java

Encapsulation en JAVA
On peut étendre la visibilité aux sous-classes avec le mot clé : proctected.

Attention : on n’étend pas la visibilité private mais la visibilité par défaut.

⇒ l’héritage s’ajoute aux packages


⇒ protected ne protège pas mais augmente la visibilité !

▪ public
▪ Toutes les classes
▪ protected
▪ Ajoute les sous-classes
▪ défaut
▪ Ajoute les classes du package
▪ private
▪ La classe
122
La visibilité en Java

Encapsulationen JAVA
On peut étendre la visibilité aux sous-classes avec le mot clé : proctected.

Attention : on n’étend pas la visibilité private mais la visibilité par défaut.


=⇒ l’héritage s’ajoute aux packages
=⇒ protected ne protège pas mais augmente la visibilité !

private défaut protected public


la classe elle-même OUI OUI OUI OUI

une sous-classe, paquetage = NON OUI OUI OUI


pas une sous-classe, paquetage = NON OUI OUI OUI
une sous-classe, paquetage différent NON NON OUI OUI

pas une sous-classe, paquetage diff NON NON NON 123


OUI
La visibilité en Java

124
Le mot super en Java

125
Le mot super en Java

126
Le mot super en Java

127
Le mot super en Java

128
Le mot super en Java

129
Constructeurs et héritage en Java

130
Constructeurs et héritage en Java

131
Constructeurs et héritage en Java

132
Redéfinition et Surcharge des méthodes

Redéfinition vs Surcharge
➢ Ne pas confondre redéfinition et surcharge des méthodes :
–on redéfinit une méthode quand une nouvelle méthode a la même signature
qu’une méthode héritée de la classe mère.

–on surcharge une méthode quand une nouvelle méthode a le même nom,
mais pas la même signature, qu’une autre méthode de la même classe
➢ En règle générale, il est préférable d'utiliser la surcharge entre deux
méthodes quand elles ont la même sémantique.

float sqrt(float value) {...}


double sqrt(double value) {...}

❖ Rappel: Signature d’une méthode (nom de la méthode + ensemble des


133
types de ses paramètres)
Redéfinition et Surcharge des méthodes

Redéfinition vs Surcharge
➢ Soit une classe B qui hérite d'une classe A.
➢ Dans une méthode d'instance m() de B, super. sert à désigner un membre de A :
– en particulier, super.m()désigne la méthode de A qui est donc en train d’être
redéfinie dans B :
int m(int i) {

return 500 + super.m(i);

➢ On ne peut trouver super.m() dans une méthode static m() ;

➢ Attention !!!: une méthode static ne peut être redéfinie.

134
Redéfinition et Surcharge des méthodes

135
Redéfinition et Surcharge des méthodes

136
Redéfinition et Surcharge des méthodes

137
Redéfinition et Surcharge des méthodes

138
final et héritage

139
La classe Object

140
La classe Object

141
Polymorphisme

Polymorphisme

142
Polymorphisme

Contexte: soit B hérite de A et que la méthode m() de A soit


redéfinie dans B

Quelle méthode m() sera exécutée dans le code suivant, celle de


A ou celle de B ?
 A a = new B(5); a est un objet de la classe B
mais il est déclaré de la classe A
 a.m();

 La méthode appelée ne dépend que du type réel (B) de


l’objet a (et pas du type déclaré, ici A).
 C’est la méthode de la classe B qui sera exécutée

143
Polymorphisme

 Le polymorphisme est le fait qu’une même écriture


peut correspondre à différents appels de méthodes ;
par exemple,
 A a = x.f();
 a.m();
appelle la méthode m() de A ou de n’importe quelle sous-
classe de A f peut renvoyer une instance de A
ou de n’importe quelle sous-
classe de A

Ce concept est une notion fondamentale de la programmation


objet, indispensable pour une utilisation efficace de l’héritage

144
Mécanisme du polymorphisme

Le polymorphisme est obtenu grâce au « late binding


» (liaison retardée) : la méthode qui sera exécutée est
déterminée
–seulement à l’exécution, et pas dès la compilation
–par le type réel de l’objet qui reçoit le message (et
pas par son type déclaré)

145
Utilisation du polymorphisme

 Le polymorphisme facilite l’extension des programmes :


 on peut créer de nouvelles sous-classes sans toucher aux programmes déjà
écrits

 Par exemple, si on ajoute une classe Enseignant, le code de


Afficher() sera toujours valable
 Sans polymorphisme, il aurait fallu modifier le code source de
la classe Personne.

146
Exercice

147
Exercice

Donnez les résultats des bouts de code suivants:

148
Exercice

Donnez les résultats des bouts de code suivants:

149

Vous aimerez peut-être aussi