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 :

[POO]héritage du constructeur de la classe parente


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    968
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 968
    Points : 141
    Points
    141
    Par défaut [POO]héritage du constructeur de la classe parente
    Bonjour,

    Quand une classe étend une autre classe, la classe dite "enfant" hérite , via le constructeur de la classe parente des valeurs par défaut des variables membre de la classe parente ainsi que de toutes les méthodes de la classe parente.

    Or, si la classe parente a plusieurs constructeurs, duquel hérite la classe enfant?

    Ensuite, si la classe parente a un unique constructeur qui possède des argments, peut on le considérer comme constructeur par défaut?

    Merci beaucoup de votre aide.

    Cordialement.

    Nathalie
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Au risque de dire des bétises, je dirais que la classe n'hérites pas du constructeur de la classe qu'elle étend, mais seulement des ces variables de classe et de ses méthodes

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 277
    Points : 230
    Points
    230
    Par défaut
    Je me sens moins seul

  4. #4
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par wichtounet
    Au risque de dire des bétises, je dirais que la classe n'hérites pas du constructeur de la classe qu'elle étend, mais seulement des ces variables de classe et de ses méthodes
    Je confirme que c'est bien cela.
    De plus ça parait logique !
    Pourquoi la classe B qui étend la classe A hériterait du constructeur de A ?
    Quel intéret ? Cela reviendrait à faire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Class A
    {
     public a(){}
    }
    Class B extends A
    {
     public b()
     {
      B b  = new A();
     }
    }
    Bref le truc inutile et embrouillant au possible...
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  5. #5
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ensuite, si la classe parente a un unique constructeur qui possède des argments, peut on le considérer comme constructeur par défaut?
    non.
    le constructeur par defaut est celui sans parametre, et c'est lui qui est appele lorsqu'on instancie une des classes derivees.
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  6. #6
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Voici ce qui se passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class A {
      A(){}
    }
     
    classB extends A{
     
    }
    Lorsqu'une classe de déclare pas de constructeur (B ici), le compilateur en fait un par défaut. Dans cette exemple le compilateur créé automatiquement un constructeur B(){}

    Si, dans un constructeur, on ne fait pas d'appel explicite à super(qqch), le compilateur rajoute automatiquement au début du constructeur un super();

    donc dans l'exemple ci dessus, une fois compilé, le code sera équivalent à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class A {
      A(){super();}
    }
     
    classB extends A{
     B(){super();}
    }

    C'est aussi pour cela qu'on ne peut avoir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class A {
      A(int i){};
    }
     
    classB extends A{
     
    }
    La classe B ne compilera pas car le compilateur créé automatiquement un constructeur B() qui va appeler super(). Or le constructeur A() n'existe pas.
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  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
    Salut,


    Juste pour completer le post de Satch, on peut très bien effectuer un appel explicite à super() afin de spécifier quel constructeur de la classe parent on doit utiliser. Exemple :

    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
    public class A {
     
    	private int i;
     
    	public A (int i) {
    		this.i = i;
    	}
    }
     
     
     
    public class B extends A {
     
    	public B(int i, int j) {
    		super(i); // appel de A(i);
    	}
     
    }
    a++

  8. #8
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Pas mieux !
    La réponse d'adiGuba est celle qui répond le mieux au problème décrit.
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

Discussions similaires

  1. [POO] Accès à une variable de la classe parent
    Par escteban dans le forum Langage
    Réponses: 5
    Dernier message: 22/05/2008, 09h26
  2. [POO] Faire appel au constructeur de la classe parent
    Par sliderman dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2008, 14h30
  3. [POO] Héritage : Surcharge d'un membre statique parent
    Par Nullos Oracle dans le forum Langage
    Réponses: 7
    Dernier message: 11/09/2007, 18h39
  4. [POO] héritage de constructeurs
    Par benkunz dans le forum Langage
    Réponses: 2
    Dernier message: 03/04/2007, 15h29
  5. Réponses: 10
    Dernier message: 20/09/2006, 17h04

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