Le polymorphisme
La classe Fille qui hrite de la classe Mere prend les caractristiques de cette dernire tout en ayant des
proprits en plus
Classe Mere
mMere()
mRedef()
hritage
Classe Fille
mRedef()
mFille()
Revenons au cas classique o l'on cre 2 objets objM et objF en utilisant les constructeurs de chacun des 2:
Class Mere {
int a ;
public Mere(int a){ this.a=a;}
public void mMere(){}
public void mRedef(){
System.out.println("Redef de fille"); }
}
Tas d'allocation
mRedef()
mMere()
mRedef()
mFille()
3
Pile
Mere (3);
Table de
fonction de Mere
Table de
fonction de Fille
2
10
Fille(2,10)
objM
objF
Pile
La
La
Le compilateur cre dans le tas d'allocation les variables de chaque objet et la rfrence des
class
class ses fonctions membres (sauf si l'on prcise le mot-cl final avant les fonctions).
e
e
Empl
Empl
1.1 Que se passe-t-il si l'on tape le code suivant ?
oye
oye
Mere objM;
repre
repre
Fille1= new Fille(2,10);
nd
ndobjM=Fille1;
// ou bien Mere objM = new Fille(2,10);
toute
Fille objF = new Fille(2,10);
toute
s les
s les
propr
l'excution
propr
its
its
mRedef()
mRedef()
de
de
mMere()
mFille()
Indiv
2
Indiv
3
10
Table de
idu, ...
Table de
idu, ...
Pile
objM
La
class
e
Empl
Mere (3);
fonction de Mere
fonction de Fille
Fille(2,10)
objF
Pile
La
class
e
Empl
oye
le compilateur regarde les fonctions dfinies dans Mere et Fille. Pour ces fonctions,
la connexion se fera lors de l'excution . Pour le reste, le compilateur place les
rfrences des fonctions. Ainsi les fonctions disponibles sont mMere() et mRedef() pour
l'objet objM.
De plus, seule la variable a est initialis 3 (la variable b appartient Fille et est
donc perdue).
1.2
1.3
Definition du polymorphisme
Le polymorphisme est une dition de lien dynamique. Ainsi l'appel une mthode
dfinie dans la classe mre et dans la classe fille ne sera pas fig la compilation. C'est
seulement l'excution que le code de la mthode dsire sera excute.
Mere objM = new Mere(3);
objM.mRedef(); // fonction de Mere
Mere objM = new Fille(2,10);
objM.mRedef(); // fonction de Fille