• Aucun résultat trouvé

Polymorphisme Polymorphisme

N/A
N/A
Protected

Academic year: 2022

Partager "Polymorphisme Polymorphisme"

Copied!
14
0
0

Texte intégral

(1)

Polymorphisme Polymorphisme

Karima Boudaoud Karima Boudaoud

IUT-R&T IUT-R&T

(2)

Polymorphisme (1) Polymorphisme (1)

Question

Reprenons l’exemple de la classe Etudiant qui hérite de la classe Personne. Soit une méthode

getNom() de Personne qui est redéfinie dans Etudiant

quelle méthode getNom() sera exécutée dans le code suivant, celle de Personne ou celle de Etudiant?

Personne a =new Etudiant(5); // a est un objet de la classe a.getNom(); Etudiant mais il est

déclaré de la classe

Personne

la méthode appelée ne dépend que du type réel (Etudiant) de l’objet a et pas du type déclaré (ici Personne )

c’est la méthode de la classe Etudiant qui sera exécutée

(3)

Polymorphisme (2) Polymorphisme (2)

NomComplet peut être utilisé à la place de Nom

(4)

Exemple (1) Exemple (1)

Nom[] noms = new Nom[4];

noms[0] = new NomComplet("Cantonna",

"Eric");

noms[1] = new Nom("Ronaldo");

noms[2] = new NomComplet("Overmars",

"Marc");

...

for (int i = 0; i < 4; i++) {

System.out.println(noms[i].getNom());

}

-> Eric Cantonna Ronaldo

Marc Overmars

Classe dérivée à la place de la classe

Quelle méthode ?

(5)

Exemple (2) Exemple (2)

for (int i = 0; i < 4; i++) {

System.out.println(noms[i].getNom());

}

0 1 2 3 noms

NomComplet getNom()

NomComplet getNom()

NomComplet getNom()

Nom getNom()

(6)

Polymorphisme Polymorphisme

même code d’invocation de getNom()

toujours sur un objet déclaré de type Nom

System.out.println(noms[i].getNom());

appliqué aux objets de types différents…

on a un effet différent selon le constructeur appelé

new NomComplet(…) ou new Nom(…)

(7)

Autre exemple (1)

Autre exemple (1)

(8)

Autre exemple (2) Autre exemple (2)

public class Polymorph { void prnt() {

System.out.println("poly");

} }

public class MonomorphA extends Polymorph { void prnt() {

System.out.println("type A");

} }

public class MonomorphB extends Polymorph { void prnt() {

System.out.println("type B");

} }

(9)

Autre exemple (3) Autre exemple (3)

...

Polymorph pm = new Polymorph();

pm.prnt();

pm = new MonomorphA();

pm.prnt();

pm = new MonomorphB();

pm.prnt();

// Poly à la place de Poly

// MonoA à la place de Poly

// MonoB à la place de Poly -> poly

type A type B

(10)

Polymorphisme (1) Polymorphisme (1)

Polymorph prnt()

MonomorphA prnt()

MonomorphB prnt() Polymorph

pm

(11)

Polymorphisme (2) Polymorphisme (2)

UpcastingUpcasting

faire passer une classe dérivée pour sa super- classe

sans risque

• toute méthode de la super-classe est aussi une méthode de la classe dérivée (par définition)

Upcast

(12)

Polymorphisme (3) Polymorphisme (3)

Comment déterminer la méthode appropriée

?

pendant la compilation

le compilateur se base sur le type déclaré

exemple

Polymorph pm;

pendant l’exécution

la JVM se base sur le type réel de l’objet qui reçoit l’invocation

exemple

pm = new MonomorphA();

c’est le "late binding » (liaison retardée)

"dynamic binding" (liaison dynamique)

(13)

Polymorphisme (4) Polymorphisme (4)

Downcasting

faire passer une super-classe pour une classe dérivée

pas sans risque

la classe dérivée étend la super-classe

peut avoir des méthodes que la super-classe n’a pas

Downcast

(14)

Polymorphisme (5) Polymorphisme (5)

public class Velo extends Vehicule { ...

public void pedaler(...) {...}

} ...

Velo unVelo = new Vehicule(); // ne compile pas

Velo unVelo = (Velo) new Vehicule();

unVelo.pedaler(); // méthode n’existe pas

Downcast provoque ClassCastException à l’exécution

Références

Documents relatifs

Lacan fait une remarque d'emblée, c'est que on peut bien sûr ne pas accepter la thèse de Jekels et Bergler, càd qu'on n'admettrait pas que l'amour serait toujours la conséquence d'un

Nous nous engageons à exercer, à nos frais, tout recours amiable ou judiciaire contre un tiers afin d’obtenir la réparation financière, dans le cadre de votre vie privée et de

□ Si l’étudiant a moins de 18 ans, vous ne pourrez obtenir la garantie VISALE : les parents peuvent se porter garant en joignant le livret de famille, la carte d'identité du

Combien le lycée Carnot a-t-il de plus ou moins d’élèves que le lycée

entre les étudiants (es) et avec les étudiants (es) ; ii) éviter la consommation de l’alcool, de la drogue, du tabac et toute sorte de stupéfiant et d’addiction en

(2) 100 kilomètres seulement sont à double voie.. Cet eil'ort devrait d'ailleurs se compléter par un dévelop- pement parallèle du matériel roulant. Les wagons-citernes qui

• ASINSA: core curriculum of the Core Foundation Engineering Program, two compulsory foreign languages including Chinese or Japanese, introductory work placement in Asia,

comme toute suite lineaire, on peut lui demander l’´ el´ ement suivant comme une suite lin´ eaire, elle poss` ede une pente.. et en outre, elle poss` ede une cote qui la d´ eporte