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 :

mot clé super


Sujet :

avec Java

  1. #1
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut mot clé super
    Bonjour,

    j'ai créé une classe Emprunteur avec un constructeur qui prend en argument un nom, et une classe Professeur qui hérite de la première, avec un constructeur qui prend en plus un argument "prenom" et un argument "matière"
    Voici la 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
     
    public class Emprunteur {
        String nom;
     
        public Emprunteur(String n){
            nom=n;
     
        }
    public String getNom(){
        return nom;
    }
    }
    et voici la 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
    14
    15
    16
    17
     
    public class Professeur extends Emprunteur{
        String matiere;
        String prenom;
     
        Professeur(String n, String p, String m){
            super(n);
            prenom=p;
            matiere=m;
        }
    public String getPrenom(){
        return prenom;
    }
    public String getMatiere(){
        return matiere;
    }
    }
    Le problème vient quand j'essaie de rajouter le "prenom" à la classe mère et je mets donc un deuxième mot clé "super" dans la classe fille. cela ne marche pas. Pourquoi? On ne peut utiliser qu'un seul mot "super"?
    Merci

  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,

    Citation Envoyé par bandit_debutant Voir le message
    Le problème vient quand j'essaie de rajouter le "prenom" à la classe mère et je mets donc un deuxième mot clé "super" dans la classe fille. cela ne marche pas. Pourquoi? On ne peut utiliser qu'un seul mot "super"?
    super() permet d'appeler le constructeur parent. Il ne peux donc y en avoir qu'un. Je ne vois pas pourquoi tu voudrais en mettre 2

    Qu'est-ce que tu veux faire exactement ?

    a++

  3. #3
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Merci adiGuba pour ta réponse.
    J'ai une classe Emprunteur qui partage avec celle de Professeur deux attributs: nom et prénom. Lorsque je vais créer une instance de la classe Professeur je voulais juste rajouter "matiere" sans avoir à répéter les deux autres.

  4. #4
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,



    super() permet d'appeler le constructeur parent. Il ne peux donc y en avoir qu'un. Je ne vois pas pourquoi tu voudrais en mettre 2

    Qu'est-ce que tu veux faire exactement ?

    a++
    J'ai trouvé, j'ai trouvé

    super(n,p);

    Merci adiGuba

  5. #5
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Il suffit de modifer ta classe mère pour ajouter le champ prénom en modifiant le constructeur en conséquence :

    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
     
    public class Emprunteur {
        String nom;
        String prenom;
     
        public Emprunteur(String n, String p){
            nom=n;
            prenom = p;
     
        }
    public String getNom(){
        return nom;
    }
     
    public String getPrenom(){
        return prenom;
    }
     
    }
    En ensuite, dans la classe fille, tu modifies l'appel via super en ajoutant le paramètre supplémentaire.

    Du coup prenom est juste référencé en tant qu'argument du constructeur de ta 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
     
    public class Professeur extends Emprunteur{
        String matiere;
     
        Professeur(String n, String p, String m){
            super(n, p); //super appelle le nouveau constructeur de la classe mère a 2 arguments
            matiere=m;
        }
     
    public String getMatiere(){
        return matiere;
    }
    }

  6. #6
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Le mieu c'est que tu créés dans Emprunteur un constructeur qui prenne en argument le nom et la matière. (protected si tu veux qu'il puisse être appelé depuis Professeur mais pas depuis un autre package de l'application)

    Ainsi dans Professeur tu as juste à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Professeur(String n, String p, String m){
        super(n, m);
        prenom=p;
    }
    EDIT : tous grillés par l'auteur du post

  7. #7
    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
    Ben dans ce cas ta classe Emprunteur doit comporter les deux champs et le constructeur qui va bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Emprunteur {
        private final String nom;
        private final String prenom;
     
        public Emprunteur(String nom, String prenom){
            this.nom=nom;
            this.prenom=prenom;
        }
     
    ...
    Remarques au passage :
    • J'ai utilisé la visibilité private afin d'empêcher l'accès depuis les autres classes du même package (ce qui est le cas lorsqu'on ne met rien). Comme tu proposes un accesseur il faudra passer par là pour obtenir les infos (cela permet de mieux protéger ta classe contre une modification abusive.
    • J'ai également utilisé le mot-clef final qui interdit toute modification du champ après son affectation dans le constructeur. A utiliser d'office pour tous les attributs qui ne doivent pas changer
    • J'ai également utilisé des noms clair pour les paramètres du constructeur. p, n et m c'est bien beau mais c'est pas très informatif
      Un nom clair et précis est bien plus utile, surtout que la plupart des éditeurs récupèrent ces noms pendant la saisie




    Ensuite dans ta classe Professeur il suffit de faire la même chose, mais en appelant le bon constructeur parent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Professeur extends Emprunteur{
        private String matiere;
     
        Professeur(String nom, String prenom, String matiere){
            super(nom, prenom);
            this.matiere=matiere;
        }
     
    ...

    a++


    [edit] Ouch méchamment grillé sur ce coup là
    Bon je laisse pour les 2/3 remarques sur le code

  8. #8
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Remarques au passage :
    • J'ai utilisé la visibilité private afin d'empêcher l'accès depuis les autres classes du même package (ce qui est le cas lorsqu'on ne met rien). Comme tu proposes un accesseur il faudra passer par là pour obtenir les infos (cela permet de mieux protéger ta classe contre une modification abusive.
    • J'ai également utilisé le mot-clef final qui interdit toute modification du champ après son affectation dans le constructeur. A utiliser d'office pour tous les attributs qui ne doivent pas changer
    • J'ai également utilisé des noms clair pour les paramètres du constructeur. p, n et m c'est bien beau mais c'est pas très informatif
      Un nom clair et précis est bien plus utile, surtout que la plupart des éditeurs récupèrent ces noms pendant la saisie




    merci encore adiGuba

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

Discussions similaires

  1. La généricité en Java et le mot clé super
    Par win_ubuntu dans le forum Général Java
    Réponses: 10
    Dernier message: 14/05/2015, 10h08
  2. Réponses: 9
    Dernier message: 20/07/2010, 15h40
  3. Mot de passe super utilisateur lors de l'instalation
    Par dirty_harry dans le forum Ubuntu
    Réponses: 1
    Dernier message: 26/02/2010, 09h19
  4. mot clé "super"
    Par Cbonniot dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2009, 15h25
  5. Réponses: 3
    Dernier message: 12/04/2007, 08h41

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