Vous êtes sur la page 1sur 3

1

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"); }
}

Class Fille extends Mere {


int b;
public Fille(int a,int b){ super(a) ; this.b=b ;}
public void mFille(){}
public void mRedef(){ System.out.println("Redef
de mre"); }
}

Mere objM = new Mere(3); // OK


Fille objF = new Fille(2,10); // OK

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

de Fille vers Mere

Lhritage dfinit un cast implicite de Fille vers Mere


Donc lexcution suivante est possible :
Mere objM = new Fille(2,10);
objM.mRedef(); // fonction de Fille
objM.mMere(); // fonction non dfinie dans Fille donc fonction de mre
System.out.println("valeur de a :"+objM.a) ; // affiche 3

Par contre il y aura erreur de compilation si l'on essai d'accder au champs b :


System.out.println(" valeur de b :"+objM.b) ;// erreur :the fied name b for objM is not defined

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