IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Question sur le polymorphisme


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 123
    Par défaut Question sur le polymorphisme
    Salut;
    j'arrive pas à comprendre pourquoi j'ai cette erreur de compilation. voila ma classe Father
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Father {
     
    	public Object methode1(){
    		return new String("Super");
    	}
    }
    Ma classe Son
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Son extends Father{
       public String methode1(){
    		return new String("Sub");
    	}
    }
    et mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main(String[] args) {
    		Father f = new Son();
    		String s = f.methode1();
    	}
    J'ai une erreur de compilation dans la deuxieme ligne
    Cannot convert from Object to String
    Normalement ce que j'ai fait dans ma classe Son est redefinir methode1
    et donc lors de l'appel du f.methode1() il doit me retourner Sub. n'est ce pas?

  2. #2
    Membre éprouvé Avatar de we.are.the.storm
    Profil pro
    Inscrit en
    Février 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 115
    Par défaut
    Bonjour,

    L'erreur vient du fait que la méthode method1 de Father renvoie un Object alors que method1 de Son renvoie un String.

    Une méthode surchargée doit avoir la même signature que la méthode originale, à savoir mêmes paramètres et même type de retour.

    Dans ton cas, Il faut donc que les 2 méthodes renvoient soit un String soit un Object.

  3. #3
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Citation Envoyé par we.are.the.storm Voir le message
    Une méthode surchargée doit avoir la même signature que la méthode originale, à savoir mêmes paramètres et même type de retour.
    Pas vrai dans le jdk 1.5 et supérieur qui supporte la covariance des types de retour.

    Le problème soulevé est du au single dispatch, la signature méthode du type déclaré (Father) est checkée à la compilation, ce qui jette l'erreur.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 123
    Par défaut
    Merci pour la reponse,
    Donc pour le compilateur f est un objet Father (d'au l'erreur de compilation), et pour la JVM (si tout se passe bien) f est un objet Son ?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le type à l'exécution est bien Son, mais le type déclaré est Father, donc quand tu utilise des méthodes, tu n'a accès qu'à celle de Son. Dans ton ca t'as quatres possiiblités pour faire fonctionner ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		Father f = new Son();
    		String s = (String)f.methode1();
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		Father f = new Son();
    		String s = ((Son)f).methode1();
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		Son f = new Son();
    		String s = f.methode1();
    ou encore changer la signature dans Father, puisqu'il retourne de toutes façon déjà un String.

Discussions similaires

  1. Question sur le polymorphisme
    Par L'aigle de Carthage dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 22/03/2013, 15h21
  2. Question sur le polymorphisme
    Par X448GN dans le forum Hibernate
    Réponses: 1
    Dernier message: 11/03/2009, 12h54
  3. [débutant] Question sur le polymorphisme
    Par coyotte507 dans le forum C++
    Réponses: 12
    Dernier message: 25/02/2007, 14h10
  4. [Héritage] Question sur le polymorphisme
    Par nikhil dans le forum C++
    Réponses: 7
    Dernier message: 28/12/2005, 20h33
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo