begin process at 2012 02 15 01:42:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Général

 > 

La je pige pas !


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

La je pige pas !

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ée 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales