Polymorphisme

Résolu
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 - 8 nov. 2006 à 10:37
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 - 8 nov. 2006 à 13:09
Bonjour a tous,

y a une ptite question qui me tarraude : j ai l impression que le polymorphisme ne marche pas pour les fonctions statiques. Par exemple

class Machin {
public int f() {return(5); }
public static int g() {return (6);}
}

class Bidul extends Machin {
public int f() {return(2); }
public static int g() {return (4); }
}

le main :

Bidul b=new Bidul();
Machin m =b;
System.out.println(m.f()*m.g());

et ben ca donne 12 ! d où la reflexion en début du post.
Bref j arrive pas trop a comprendre les mécanismes qui sont derrière (ok en statique ca a l air d attaquer la fonction de la classe et pas de l objet (logique puisque c est statique))
Mais bon j trouve pas ca tres logique quand meme.

Si quelqu'un a une explication rationnelle à me fournir je lui en serai bien gré :D

Mici,
++ Toinou

5 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
8 nov. 2006 à 12:01
Salut,

le lien ci-dessous devrait t'éclairer sur le sujet :
http://bruce-eckel.developpez.com/livres/java/traduction/tij2/?chap=8&page=0

bonne lecture :P

pour info voici ma recherche : ICI

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
8 nov. 2006 à 10:53
Salut,

normale que le polymorphisme ne touche pas le static vu qu'en toute logique et avec le respect des règles d'écriture java tu es sensé faire comme suit:

System.out.println(m.f()*Machin.g());
ou encore
System.out.println(m.f()*Bidul.g());

et de ce fait te rendre compte que le polymorphisme sur du static n'a pas de sens
et ici vu que 'm' est de type Machin il est logique que ce soit sa méthode static...

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_Vitty Messages postés 4 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 9 novembre 2006
8 nov. 2006 à 10:58
Bonjour,

Une méthode statique doit être appelée de manière statique :
- m.g() "n'est pas correct "
- Machin.g() ou Bidul.g() "est correct "

Voilà :)
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
8 nov. 2006 à 11:30
merci,

c est ce que je pensait c est clair que la syntaxe est pas bonne il n empeche qu en faisant m.g() il pourrait tres bien traduire par Bidul.g() vu que m est en réalité une instance de Bidul (bien qu il ai été déclaré de type Machin).
Bref c est plutot le mécanisme à l éxecution qui m intéresse plus que la syntaxe (je sais bien que ce code n est pas tres tres beau !!)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
8 nov. 2006 à 13:09
lol,
oki thanks !
++ Toinou
0
Rejoignez-nous