Polymorphisme

Résolu
Aminax Messages postés 88 Statut Membre -  
Aminax Messages postés 88 Statut Membre -
Bonjour,
j'ai eu des lacunes de comprendre le plymorphisme !

est ce que vous pouvez me l'expliquer d'une manière simple ce code et merci d'avance !
class A{
public void f(){...}

class B extends A{
public void f(){...}
}

et A a = new B();
}
la question qui se pose :
l'appel de "a.f()" est-il relatif à la version "f()" de A ou de B?

Svp

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
L'appel se fait toujours sur l'objet, ici tu as fait un new B() donc la méthode appelée est celle définie en B.
Le polymorphisme permet d'avoir des objets de différents types (A, B, C...) pour lesquels la méthode f existe (même si elle ne fait pas la même chose) et d'utiliser cette méthode comme si tous les objets étaient tous de type A.
Un exemple "simple" de polymorphisme c'est la méthode toString, elle est définie par la classe Object mais c'est celle de l'objet (donc la plus spécifique) qui est utilisé. C'est grâce à cela que l'on peut faire des méthodes polymorphe comme System.out.println(Object obj) qui fait juste un appel obj.toString()
1
BabyPtero Messages postés 7 Statut Membre
 
Pour faire simple.

Tu as deux objets, un A et un B

Dans chaque classe (A et B) tu as une méthode m();

Tu es d'accord que tu peux écrire deux méthodes différentes ? exemple :

pour la classe A : m() { System.out.println("salut"); }
pour la classe B : m() { System.out.println("bonjour"); }

Si tu créer un objet A, et que tu fais A.m();
Tu auras le message "salut" à l'écran.

En revanche, si tu fais B.m();
Tu auras le message "bonjour" à l'écran.

J'espère t'avoir aidé ;)
0
Aminax Messages postés 88 Statut Membre
 
oui je vois mais là j'ai : A a=new B() ; & B herite de A
cela signifie que le type déclaré de a : A et le type réel : B ...Lorsque je mets a.m() quel méthode va être appeler méthode m de A ou de B ?
et merci d'avance :)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Je t'ai déjà répondu. "L'appel se fait toujours sur l'objet, ici tu as fait un new B() donc la méthode appelée est celle définie en B."
0
Aminax Messages postés 88 Statut Membre
 
juste que j'ai pas fait attention à cette phrase au début !! .. j'ai bien compris! merci beaucoup KX :) et bon début de semaine :)
0