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 :

super class et constructeur


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Points : 15
    Points
    15
    Par défaut super class et constructeur
    Salut,

    Quand on crée une classe qui possède qu'un seul constructeur et qui a un argument par exemple.
    Et qu'après on étend cette classe, est ce qu'on est obligé de redefinir le constructeur par defaut (celui sans argument) dans la classe mère ?
    Et si c'est bien ça, c'est quoi l'interet ?

    merci à vous

  2. #2
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    quand tu étends une classe, la seule contrainte, point de vue constucteur, c'est que le constructeur de la classe fille doit appeler un des constructeur de la classe mère, afin que la chaine de construction jusqu'à Objet ne sois pas interrompue. Quand tu ne défini pas de constructeur du tout dans une classe fille ou que tu ne fait pas explicitement appel au constructeur du parent, le compilateur ajoute automatiquement un appel au constructeur par défaut du parent (sans argument).


    Donc dans ton cas, il n'y a pas de constructeur parent par défaut, tu dois donc faire un appel explicite à un des constructeur avec argument du parent, via un appel à super().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class X {
        public X(Type unArgument){
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Y extends X {
       public Y(){super(quelquechose);}
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Ok d'accord, merci beaucoup je crois que j'ai compris le truc.
    Mais par exemple, dans eclipse, j'ai écrit :
    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
     
    class X {
    	int numero = 5;
    	X (int n){
    	System.out.println(n);
    		}
     
    }
     
    class Y extends X {
    	Y(){
    	super(n);
    	}
     
    }
    Mais il me souligne n en me disant "cannot be resolved".


    Et par exemple, si dans la classe mère, je redéfinit le constructeur par défaut.
    Et que dans la classe fille, je vais faire un constructeur qui prend un argument.
    Quand je vais appeler le constructeur de la classe fille, pour que le chaine de construction de l'objet ne soit pas interrompue, ça va donc m'executer le code qu'il y a dans le constructeur sans argument de la classe mère ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class X {
    int numero = 5;
    X (int n){
    System.out.println(n);
    }
     
    class Y extends X {
    Y(){
    super(n);
    }
    Eclipse dois aussi te dire que "numero" n'est jamais utilisé

    En fait dans la clsse Y, il ne trouve aucune variable "n" dans le bloc de ton constructeur (rappel : un bloc est délimité par les { et } )
    Ton bloc dois donc avoir une variable "n", et le seul moyen pour avoir un "n" avant d'appeler super() c'est qu'il soit dans les paramètre du constructeur (car super() dois toujours être la 1ere instruction).
    Je te laisse faire la modification

Discussions similaires

  1. SUPER - utiliser le constructeur de la même class
    Par Thoustra dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 24/11/2010, 15h14
  2. Réponses: 8
    Dernier message: 18/07/2005, 18h38
  3. Referencer une super classe
    Par MrBlonde666 dans le forum Général Python
    Réponses: 2
    Dernier message: 02/07/2005, 17h52
  4. Super classes et sous-classes/Méthodes
    Par smag dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 23h10
  5. classe et constructeur
    Par grand's dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2005, 13h31

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