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 :

Extends et Super()


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Par défaut Extends et Super()
    Bonjour,
    Mon problème est je pense assez simple. J'ai une classe startStopButton qui étend Button. Cette classe possède une donnée membre etatOn qui marche de cette manière :
    - etatOn = false -> stop
    - etatOn = true -> start
    Je défini un constructeur par defaut qui ne reçoit aucun paramètre. Avec ce constructeur le bouton sera à "stop".
    Par contre je veux un deuxième constructeur qui attend un booléen en paramètre. Si ce paramètre est à false, j'appelle le constructeur par defaut pour ne pas réécrire de code. Par contre si le paramètre est à true je veux que le bouton se crée directement à "start".
    J'appelle donc "super()" après avoir testé la valeur du paramètre et mon erreur est la suivante : L'appel de super() doit être la première chose à faire.

    Voici ma classe :
    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
     
    public class startStopButton extends Button {
     
        // Données membres
        private boolean etatOn;
     
        // Constructeur par defaut : Button stop
        public startStopButton() {
            super("Off");
            setBackground(Color.red);
            this.etatOn = false;
        }
     
        // Constructeur à un paramètre
        public startStopButton(boolean etatOn) {
            if(etatOn) {
                super("On");
                setBackground(Color.GREEN);
                this.etatOn = etatOn;
            } else {
                new startStopButton();
            }
        }
     
    }
    Que dois-je faire pour utiliser super après le test de mon paramètre ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    tu ne peux pas, par contre tu peux faire une méthode init que tu appele depuis le constructeur avec en paramètre on/off

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Par défaut
    ok j'essayerais. Mais que se passe t-il si je fait sa :
    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
     
    public class startStopButton extends Button implements ActionListener {
     
        // Données membres
        private boolean etatOn;
     
        // Constructeur par defaut : Button stop
        public startStopButton() {
            super("Start");
            setBackground(Color.GREEN);
            this.etatOn = false;
            addActionListener(this);
        }
     
        // Constructeur à un paramètre
        public startStopButton(boolean etatOn) {
            if(etatOn) {
                new Button("Stop");
                setBackground(Color.RED);
                this.etatOn = etatOn;
                addActionListener(this);
            } else {
                new startStopButton();
            }
        }
    }

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Bien sûr que si il peut (et heureusement) ! mais autrement =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        // Constructeur par defaut : Button stop
        public startStopButton() {
            this(false);
        }
     
        // Constructeur à un paramètre
        public startStopButton(boolean etatOn) {
                super(etatOn ? "On" : "Off");
                setBackground(etatOn ? Color.GREEN : Color.red);
                this.etatOn = etatOn;
        }

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par juninho269 Voir le message
    ok j'essayerais. Mais que se passe t-il si je fait sa :
    [...]
    Ca peut pas marcher ton truc. Si tu fais "new" tu appelles un autre constructeur, tu ne construit pas l'instance courante.

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Par défaut
    Merci natha sa marche parfaitement bien ! J'avoue que le problème était bête mais bon je n'en voyais pas la solution

  7. #7
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Par contre tu devrais essayer de respecter les conventions de nommage de Sun !

    Une classe commence par une majuscule, les méthodes commencent par des minuscules (hormis les constructeurs mais ce ne sont pas des "méthodes"), etc.

    Ca rendra ton code plus lisible pour les habitués.

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

Discussions similaires

  1. Héritage Extend Super()
    Par Vinc06 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 16/04/2015, 12h16
  2. [Generics] super & extends
    Par ®om dans le forum Langage
    Réponses: 4
    Dernier message: 25/06/2006, 19h42
  3. Font "times new roman" super moche avec mdk 9.2
    Par shkyo dans le forum Mandriva / Mageia
    Réponses: 6
    Dernier message: 15/04/2004, 18h34
  4. Problème lors du EXTEND d'un tableau
    Par banana31 dans le forum Oracle
    Réponses: 14
    Dernier message: 10/02/2004, 10h58

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