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 :

utilisation par un fils d'une méthode qu'il surcharge ...


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 8
    Points
    8
    Par défaut utilisation par un fils d'une méthode qu'il surcharge ...
    Bonsoir à tous.

    Voilà j'aimerais bénéficier de votre expérience afin de solutionner un cas d'école que j'aimerais pouvoir résoudre proprement.

    Je vous explique rapidement la situation, basique.

    Une classe Personne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public class Personne {
     
        protected String nom = "";
        protected String prenom = "";
        protected Ddate datenaiss = null;
        protected Ddate datedec = null;
     
        public Personne( String nom, String prenom, Ddate datenaiss, Ddate datedec) {
            this.nom = nom;
            this.prenom = prenom;
            this.datenaiss = datenaiss;
            this.datedec = datedec;
        }
     
        public String toString(){
            return  prenom+" "+nom+" est né(e) le "+datenaiss.toString()
                    +((datedec == null)?".":" et est décédé le "+datedec.toString()+".");   
        }
    }
    et une classe qui en hérite, la classe PersonneDescendant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class PersonneDescendant extends Personne implements Cloneable{
     
        protected PersonneDescendant pere = null;
        protected PersonneDescendant mere = null;
     
        public PersonneDescendant(String nom, String prenom, Ddate datenaiss, Ddate datedec, PersonneDescendant pere, PersonneDescendant mere){
            super(nom,prenom,datenaiss,datedec);
            this.pere = pere;
            this.mere = mere;
        }
     
        public String toString(){
     
            Personne p = null;
            Personne m = null;
     
            Personne f = (Personne) this;
            if(pere!=null) {p = (Personne) pere;}
            if(mere!=null) {m = (Personne) mere;}       
     
            return  "Personne : "+f.toString()+"\n"+((pere!=null)?"- Père : "+p.toString()+"\n":"- Pas de père indiqué\n")+((mere!=null)?"- Mère : "+m.toString():"- Pas de mère indiquée");
        }
    }
    Comme vous pouvez le voir, en utilisant un cast de PersonneDescendant en Personne, j'aurais aimé pouvoir bénéficier de la méthode toString de la classe Personne pour l'affichage du père et de la mère, mais pourtant, cette méthode n'est pas celle appelée (?) et l'affichage se fait malgré tout de façon récursive: affichage des parents des parents ....

    En d'autre mots, comment faire pour pouvoir appeler la méthode toString() des parents située dans Personne et surchargée par ces derniers, Peut etre que cette "remontée" dans l'héritage n'est pas permise par java ...

    Si quelqu'un connaissait la/une solution à ce problème ou tout du moins une solution de détourner habilement le problème....

    Merci @ vous !!

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le fait de caster ne change pas le type réel de la classe, et donc c'est bien la méthode toString() de PersonneDescendant qui est appellé...

    Par contre tu peux toujours appellé la méthode parente avec super :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public String toString(){
     
            Personne p = null;
            Personne m = null;
     
            if(pere!=null) {p = (Personne) pere;}
            if(mere!=null) {m = (Personne) mere;}       
     
            return  "Personne : "+super.toString()+"\n"+((pere!=null)?"- Père : "+p.toString()+"\n":"- Pas de père indiqué\n")+((mere!=null)?"- Mère : "+m.toString():"- Pas de mère indiquée");
        }
    a++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Effectivement j'avais déjà pensé à cette solution concernant la personne "fils", comme tu as pu l'indiquer.

    Mais en ce qui concerne l'affichage pour le père et la mère ?
    Quoi qu'il en soit merci pour ta réponse.

  4. #4
    Membre du Club Avatar de bubu56
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    vu que le père et la mère sont des PersonneDescendant tu peux ajouter une méthode dans PersonneDescendant :
    protected String toSuperString(){
    return super.toString();
    }

    et appeler cette méthode à la place de toString()...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Ouaip je vais proceder comme ça!

    En fait j'hésitais à faire de cette façon car l'objectif de ce TP était sans doute de comprendre le fonction de diverses bases de la POO telles que la surcharge et etc.

    Je pensais donc qu'il aurait fallut "jouer le jeu" jusqu'au bout, mais sans doute que non ^^

    En tout cas si quelqu'un sait comment un fils pourrait accèder à une méthode de son père qu'il surcharge, ça pourrait toujours être interessant !!

    Merci pour les réponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/09/2011, 14h59
  2. Réponses: 2
    Dernier message: 18/04/2011, 14h09
  3. Appeler une méthode par son nom sans utiliser eval
    Par rambc dans le forum Général Python
    Réponses: 5
    Dernier message: 30/10/2009, 17h05
  4. Mémoire utilisée par une méthode Java
    Par thierry_b dans le forum Général Java
    Réponses: 2
    Dernier message: 01/10/2009, 11h25
  5. Réponses: 15
    Dernier message: 04/10/2007, 11h37

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