Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : La je pige pas ! [ Divers / Général ] (super_toinou)

mercredi 21 février 2007 à 12:01:05 | La je pige pas !

super_toinou

Bonjour à tous, en faisant un tour sur des exos de certification j suis tombé sur un problème et la sérieux j comprend pas (et j suis pas le seul). Est ce que quelqu'un à une explication au probleme suivant : class SuperCafe4Java { public Object get (Object o) { return ("SuperCafe4Java"); } } class SubCafe4Java extends SuperCafe4Java { public Object get (String o) { return ("SubCafe4Java"); } } class TestCafe4Java { public static void main (String[] arguments) { SuperCafe4Java superFoo; SubCafe4Java subFoo; superFoo = new SubCafe4Java(); System.out.println (superFoo.get("super")); subFoo = new SubCafe4Java(); superFoo = subFoo; System.out.println (superFoo.get("super")); } } Pour moi la réponse ca devrait etre SubCafe4Java SubCafe4Java Mon raisonnement résumé : le 1ere coup en réalité c est un SubCafe4Java donc il appelle get("String") ca devrait matcher avec la signature de la classe SubCafe4Java donc ca devrait afficher SubCafe4Java (+ ou - meme raisonnement pour le 2ème cas) Or en réalité ca affiche SuperCafe4Java SuperCafe4Java J ai beau me triturer la tête là j trouve pas, si quelqu'un a une explication ce serait bien cool !! Merci ++ Toinou PS: j paye mon coup à celui qui me trouve la réponse et qui arrive à l expliquer !! :D

mercredi 21 février 2007 à 14:15:03 | Re : La je pige pas !

gmi19oj19

Membre Club
Pour le 1er test, l'affichage de SuperCafe4Java est logique vu que c'est le resultat de la seule méthode get.

Dans le second test, tu as deux methodes get, attendant respectivement un Object (méthode héritée) et un String (méthode de classe). J'aurai tendance à penser qu'il prend le type le plus général quand on passe en paramètre à une méthode un objet, ce qui explique l'utilisatin de la méthode héritée. Cependant, pourle second point, j'en suis pas certain

mercredi 21 février 2007 à 14:16:48 | Re : La je pige pas !

gmi19oj19

Membre Club
Et là je me rends compte que j'ai dit n'imp' pour le 1er cas puisque qu'on utilise le constructeur de la classe fille... M'enfin, je maintiens mon raisonnement pour la 2ème situation, qui s'appliquerait désormais à la première ^^

mercredi 21 février 2007 à 14:22:22 | Re : La je pige pas !

shaiulud

il y a une explication c'est la surcharge de méthode

dans Super c'est  public Object get (Object o)

dans Sub c'est public Object get (String o)  qui ne surcharge pas celle de super (signature différente)

superFoo.get("super") appelle get(Object) car "super" String est aussi un Object

pour le 2nd cas c'est pareil
si tu veux avoir avoir sub en réponse, il faut caster




mercredi 21 février 2007 à 14:36:37 | Re : La je pige pas !

thevman

Je n'ai pas la réponse exact  mais à mon avis la réponse viens du cast qui est effectué

subFoo = new SubCafe4Java();
superFoo = subFoo;
System.out.println (superFoo.get("super"));

En effet superFoo est du type SuperCafe4Java  et on lui passe une classe du type SubCafe4Java ,
 --> le passage marche parceque SubCafe4Java  hérite de SuperCafe4Java  ( pour faire une comparaison c'est comme qd on cast un string en Object)
Le problème c'est que SuperCafe4Java  ne connait que ces méthodes donc c'est normal qu'il n'affiche que le message SuperCafe4Java.

D'ailleur pour faire le test essaye de cast un String en Object et regarde les méthode de ton objet Object (y a pas celle de String ^^)



 Nare Trouvé !!!

mercredi 21 février 2007 à 14:56:24 | Re : La je pige pas !

thevman

Re,
J'ai trouvé un article qui explique un peu mieux le problème. bonne lecture et ... ce sera une blonde pour moi lol.

[ Lien ]

 Nare Trouvé !!!

mercredi 21 février 2007 à 16:41:08 | Re : La je pige pas !

super_toinou

Yopla, merci tout le monde pour les réponses , j suis pas par tout mais apres reflexion je pense que c est shaiulud qui doit s approcher de la vérité. Normalement la JVM appelle la méthode la plus proche de l'objet réel (ce qu explique le lien de thevman) donc je puis pas spécialement d'accord avec l analyse "il va chopper d abord les fonctions dans les super classes et apres descend s il trouve pas". A mon avis puisque ce n'est pas la meme signature au niveau des arguments que prend la méthode c est un cas de surchage et non de redefinition de méthode ce qui fait que le polymorphisme ne peut s adapter dans ce cas. A l execution la JVM voit donc la fonction get(Object) bien qu on lui passe un String. Pour info get((String) "toto") rend le meme résultat ! Bref merci à tous, si quelqu un pense que j ai tord n'hésitez pas à me le dire !! ++ Toinou

jeudi 22 février 2007 à 01:06:09 | Re : La je pige pas !

mhip

Réponse acceptée !
Je confirme c'est un cas de surcharge et non de redefinition d'où le résultat obtenu

jeudi 22 février 2007 à 10:39:17 | Re : La je pige pas !

super_toinou

Merci a tous !! le coup à boire est toujours valable pour ceux qui sont sur panam !!! :D ++ Toinou



Cette discussion est classé dans : class, get, subcafe4java, supercafe4java, superfoo


Répondre à ce message

Sujets en rapport avec ce message

problèmes de classes [ par Waaagh ] Comment ca se fait que j'arrive pas a faire compiler ce programme? je le met dans un fichier animal.java et le compil m'insulte en me disant qu'il "ca marre de class not found!!! [ par hgrandsart ] class not found !! c'est tout ce que sais dire I.E 5.5quand on lui envoie une applet compilée avec JDK2J'ai désactive le JIT d'IE, Réeactivé, télécha executer .class [ par Aldee ] Je n'arrive pas à lancer mes .class depuis une fenetre Dos.Dites-moi où je me trompe :0-J'ouvre la fenetre Dos de Windows MSDos.1-je me mets dans le r .class problème [ par sneark ] Bon je suis le débutant des débutant...Bon alors j'ai esseye de mettre un applet sur mon site mais ça a foirer: http://tout.cara.free.fr/merde.htmJ'ai JSP TOMCAT pb simple .... mais pas pour moi!!!! [ par lebobby ] Bonjour,je travailles sous XP avec TOMCAT 4.1.18.Il est correctement installé (J'ai fait fonctionné les test JSP et SERVLET avec succès).Mais voila, p pb TOMCAT AU secours !!!! [ par lebobby ] Bonjour,je travailles sous XP avec TOMCAT 4.1.18.Il est correctement installé (J'ai fait fonctionné les test JSP et SERVLET avec succès).Mais voila, p Problème avec un Keylistener [ par subichan ] Bonjour tout le monde,j'ai le probleme suivant :J'ai defini ma class comme telle: public class Nom extends JFrame implements KeyListener {...et j'obti Problème avec un Keylistener [ par subichan ] Bonjour tout le monde,j'ai le probleme suivant :J'ai defini ma class comme telle: public class Nom extends JFrame implements KeyListener {...et j'obti objet dynamique [ par Juls ] Salut J'ai un gros problème .Je vais essayer de faire simple :Une class voiture et une class parcoursLa class parcours instancie mes objets voitures e objet dynamique [ par Juls ] Salut J'ai un gros problème .Je vais essayer de faire simple :Une class voiture et une class parcoursLa class parcours instancie mes objets voitures e


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.