super_toinou
Messages postés764Date d'inscriptionmardi 25 mai 2004StatutMembreDernière intervention 8 mars 2011
-
8 nov. 2006 à 10:37
super_toinou
Messages postés764Date d'inscriptionmardi 25 mai 2004StatutMembreDerniè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
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 ..."
super_toinou
Messages postés764Date d'inscriptionmardi 25 mai 2004StatutMembreDernière intervention 8 mars 20116 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 !!)
Vous n’avez pas trouvé la réponse que vous recherchez ?