Hritage et polymorphisme
Nicolas Baudru
ml : nicolas.baudru@esil.univmed.fr
page web : nicolas.baudru.perso.esil.univmed.fr
Cercle
tourner()
(centre)
jouerSon()
Carre
tourner()
(centre)
jouerSon()
Triangle
tourner()
(sommet)
jouerSon()
Cercle
Carre
Triangle
Cercle
Forme
tourner()
superclasse
(centre)
jouerSon()
Carre
hritent de
Triangle
sous-classes
Forme
tourner()
(centre)
jouerSon()
Triangle
tourner()
(sommet)
jouerSon()
(celui propre au triangle)
Comprendre l'hritage
L'hritage en Java
MdecinDeFamille
faitDesVisites
donnerConseil()
Docteur
travailALHopital
traiterPatient()
Chirurgien
traiterPatient()
faireUneIncision()
L'hritage en Java
Docteur
travailALHopital
traiterPatient()
class Docteur {
boolean travailALHopital ;
}
void traiterPatient () {
// fait un checkup }
L'hritage en Java
Docteur
travailALHopital
traiterPatient()
MdecinDeFamille
faitDesVisites
donnerConseil()
class MedecinDeFamille extends Docteur {
boolean faitDesVisites ;
}
void donnerConseil {
...
L'hritage en Java
Docteur
travailALHopital
traiterPatient()
Chirurgien
traiterPatient()
faireUneIncision()
class Chirurgien extends Docteur {
void traiterPatient { // oprer
void faireUneIncision () { ... }
}
Questions
10
Loup
Animal
emettreSon()
manger()
dormir()
vagabonder()
l . emettreSon ();
l . vagabonder ();
Canin
vagabonder()
l . manger ();
l . dormir ();
Loup
emettreSon()
manger()
11
12
Questions
Une superclasse peut-elle invoquer une mthode rednie dans une de ses
sous-classes ?
Une sous-classe peut-elle utiliser les mthodes de la superclasse ?
13
package
protected
public
14
Utiliser l'hritage quand une classe est un type plus spcique qu'une
superclasse.
Utiliser l'hritage quand vous avez un comportement qui doit tre partag par
plusieurs classes du mme type gnral.
Ne pas utiliser l'hritage uniquement pour pouvoir rutiliser le code d'une
autre classe sans qu'il y ait de relation entre les deux classes.
Ne pas utiliser l'hritage si la sous-classe et la superclasse ne russissent pas
le test du EST-UN.
15
Avantages de l'hritage
16
Le polymorphisme
1 Dclarer une variable rfrence : Chien monChien = new Chien() ;
2 Crer un objet : Chien monChien = new Chien() ;
3 Lier l'objet et la rfrence : Chien monChien = new Chien() ;
Le point important ici est que la rfrence et l'objet sont de mme type.
17
Le polymorphisme
Le polymorphisme
Il est aussi posssible d'avoir des paramtres et des types de retour polymorphes.
Cela permet d'crire du code qui ne change pas lors de l'introduction de nouveaux
types de sous-classes dans le programme.
class Veto {
public void soigner ( Animal e ) {
e . emettreSon ();
}
19
Questions
20
Rednition vs surcharge
Lorsque vous rednissez une mthode d'une superclasse, vous devez respecter les
rgles suivantes :
les arguments et les types de retour doivent tre identiques celle de la
superclasse (en fait le type de retour peut tre le type d'une sous-classe) ;
la mthode ne peut pas tre moins accessible.
Lorsque vous surchargez une mthode (qui a pu tre hrite), vous devez
respecter les rgles suivantes :
les types de retour peuvent tre dirents ;
il n'est pas possible de ne changer que le type de retour. Il faut
imprativement modier les paramtres ;
le niveau d'accs peut varier dans les deux directions.
21
23