Polymorphisme

Résolu/Fermé
Aminax
Messages postés
81
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
29 mai 2015
- Modifié par irongege le 28/12/2013 à 15:19
Aminax
Messages postés
81
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
29 mai 2015
- 30 déc. 2013 à 11:12
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
16568
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
5 juillet 2022
2 968
28 déc. 2013 à 15:17
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
Date d'inscription
samedi 28 décembre 2013
Statut
Membre
Dernière intervention
4 janvier 2014

28 déc. 2013 à 23:21
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
81
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
29 mai 2015

29 déc. 2013 à 15:57
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
16568
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
5 juillet 2022
2 968
29 déc. 2013 à 16:15
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
81
Date d'inscription
jeudi 26 septembre 2013
Statut
Membre
Dernière intervention
29 mai 2015

30 déc. 2013 à 11:12
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