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

avec Java Discussion :

Méthode super() avec paramètres


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 18
    Points
    18
    Par défaut Méthode super() avec paramètres
    Bonjour,

    J'ai un problème lors de l'utilisation d'une méthode super lorsque je dois passer des paramètres. Voici mon exemple :
    Classe mère :

    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
    25
    26
    27
    28
    29
    30
    package heritage2;
     
    public class Animal {
     
        protected String nom;
        protected int age;
        protected double prix;
     
    public Animal (String nom, int age, double prix){
        this.nom=nom;
        if ((age<0)||(prix<0)){
            throw new IllegalArgumentException ("Prix et age doivent être positif !");
        }
        else {
        this.age=age;
        this.prix=prix;
        }
    }
     
    public String getNom(){return nom;}
    public int getAge(){return age;}
    public double getPrix(){return prix;}
    public void setNom (String nom){this.nom=nom;}
    public void setAge(int age) {this.age=age;}
    public void setPrix(double prix){this.prix=prix;}
     
    public String toString(){
        return "Cet animal s'appelle : "+nom+", il a "+age+" ans et coute "+prix+" euros.";
    }
    }
    Classe fille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package heritage2;
    
    public class Espèces extends Animal{
    
        protected String espèce;
    
        public Espèces(String espèce){
            super(???);
            this.espèce = espèce;
        }
    
    }
    Je comprend lorsqu'il n'y a pas de paramètres au constructeur, mais dès qu'il y en a, plus moyen ...

    D'avance, merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Puisque c'est une classe fille de Animal, le constructeur de Animal doit être appelé. Il faut donc passer à super() les paramètres nom, age et prix du constructeur de Animal.

    Au passage, Espèces classe fille de Animal ? Pas l'air très logique -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Bonjour,

    j'aurais tout d'abord 2 remarques:
    - il vaut mieux éviter d'utiliser des caractères spéciaux (accentués dans ton cas) dans les noms de Classe, variable ou autre.
    - D'un point de vue conceptuel, ton héritage serait à revoir. Si une espèce ne représente pas un Animal précis (avec un nom/age/prix), c'est naturel que tu ne saches pas comment appeler le constructeur : cela n'a pas de sens. C'est à creuser, mais à priori, j'inverserai l'héritage (Animal extends Espece), mais tu peux aussi la mettre en variable d'instance (monAnimal.getEspece())

    Après, pour la technique, quand on appelle un constructeur super avec paramètre, on lui fournit en général 2 types de valeurs:
    - des paramètres fournit dans le constructeur de plus haut niveau (que l'on relai),
    - des paramètres en dur, spécifiques à la classe fille.

    Il peut arriver que l'on récupère des valeurs retours d'une méthode statique, mais c'est moins courant.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    pour moi tu a un problème car une Espèces n'entende pas Animal dans ton cas ça voudrais dire que ton Espèces a un age et un prix ...

    tu a plutôt un animale qui appartiens à une espèce

    sinon pour ton constructeur la méthode super vas appelé le constructeur que tu veut de la classe mère dans ton cas je suppose que tu veut le constructeur avec Nom,Age,Prix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Espèces extends Animal{
     
        protected String espèce;
     
        public Espèces(String espèce){
            super("un nom", 14, 158.24);
            this.espèce = espèce;
        }
     
    }
    ps : oupse nota lire le message des autres avant de posté

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Puisque c'est une classe fille de Animal, le constructeur de Animal doit être appelé. Il faut donc passer à super() les paramètres nom, age et prix du constructeur de Animal.

    Au passage, Espèces classe fille de Animal ? Pas l'air très logique -_-°.
    Justement, mon problème est celui la. Si je met nom, age,prix entre parenthèse, il me donne une erreur :

    "cannot reference age before supertype constructor has been called."

    Cela fonctionne avec la solution de rolfone, mais je ne veux pas forcément ces noms là. J'aimerais qu'il reprenne par exemple le nom, age et prix de l'animal (a1 par exemple) et rajoute une espèce passée en paramètre.


    PS : je sais que j'ai quelques lacunes, merci de votre patience ...

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par weautus Voir le message
    Cela fonctionne avec la solution de rolfone, mais je ne veux pas forcément ces noms là. J'aimerais qu'il reprenne par exemple le nom, age et prix de l'animal (a1 par exemple) et rajoute une espèce passée en paramètre.
    Oui, c'est ce qu'on dit : Espèces ne devrait pas être une sous-classe de Animal.

    Une sous-classe doit appeler le constructeur de sa classe mère, pas le contraire. Elle ne peut pas savoir ce que valent des paramètres qui n'ont pas encore été décidés.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Très bien merci beaucoup.

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

Discussions similaires

  1. Méthode GetFeatureInfo avec paramètre
    Par mat_elot dans le forum IGN API Géoportail
    Réponses: 6
    Dernier message: 15/06/2015, 16h22
  2. Réponses: 1
    Dernier message: 04/03/2009, 00h11
  3. Réponses: 1
    Dernier message: 28/01/2008, 14h49
  4. appeler une méthode avec paramètre dans une page JSP
    Par javasmif dans le forum Struts 2
    Réponses: 1
    Dernier message: 06/12/2007, 10h48
  5. méthode avec paramètre
    Par MaitrePylos dans le forum Ruby on Rails
    Réponses: 9
    Dernier message: 21/06/2007, 09h26

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