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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
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