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 :

[Language]constructeur de sous classes


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut [Language]constructeur de sous classes
    Bonjour, j'aurais une question concernant les constructeurs des sous classes. Ils commencent par l'instruction

    "super(tous les param de la classe mère") mais la sous classe n'ayant pas accès aux champs privés de la super classe, est-ce que le constructeur lui, y a accès? ou est-ce qu'il faut recopier tous les champs privés de la super classe dans la sous classe?

    merci

  2. #2
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    si la super classe est ta propre classe il faut mettre les champs en protected pour que les sous-classes puissent y accéder
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  3. #3
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    bonsoir,
    en fait, les constructeurs de la sous-classe doivent appeler (directement ou indirectement) un des constructeurs de la classe mère. Quant aux champs privés, seules les méthodes de la classe mère y ont accès ; ils existent bel et bien dans la classe fille mais ils n'y sont pas accessibles.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    eh bien enfait j'ai testé celà par moi meme avant de continuer à poser des questions. En utilisant l'instruction super( param de la super classe )
    on peut acceder aux champs privés. Par contre on ne peut pas accéder à ces champs dans d'autres circonstances, donc si on veut appliquer des méthode sur les "supers" champs privés, ça ne marchera pas.

    Finalement, protected est l'équivalent de private avec ceci en plus: on peut accéder aux champs protected à partir de la sous classe?
    Dans ce cas, pourquoi ne pas toujours utiliser protected, dans un souci que cette classe soit héritée dans le futur?

    Merci beaucoup pour vos précisions!

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    je constate moi meme que je me trompe dans ma question. Les champs protected sont accessibles par toutes les classes du même package et non uniquement par la classe dans laquelle ils sont définis, alors que c'est le cas des champs privés.

  6. #6
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Citation Envoyé par seb888
    Dans ce cas, pourquoi ne pas toujours utiliser protected, dans un souci que cette classe soit héritée dans le futur?
    private peut servir pour des champs servant uniquement à des méthodes par exemple ; si la méthode n'est pas private dans ce cas la sous-classe en hérite et n'a pas besoin du champ servant à cette méthode

    (ce n'est qu'un exemple...)
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  7. #7
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Montre un peu de code car dans le super, tu n'as pas accès ux champs privés de la super classe.
    Pour le reste, il est conseillé de laisser les champs en private dans la super classe et d'y accéder via les getter/setter dans les classes filles (et ailleurs s'ils sont déclarés public). Les méthodes, quan à elles, peuvent être déclarées potected afin de pouvoir les redéfinir dans les classes filles.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    voilà le code de la super classe


    public class adresse
    {
    private int num;
    private String rue;

    adresse(int num, String rue){
    this.num = num;
    this.rue = rue;}

    }



    la sous classe:


    public class adresse2 extends adresse
    {
    private String pays;

    adresse2(int num, String rue, String pays){
    super(num, rue);
    this.pays = pays;
    }


    celà compile sans probleme... la contraine étant que les objets de la classe doivent etre non modifiables. J'ai pensé que l'attribut private était le plus approprié, mais cela impliquerait que je doive recopier les champs dans la sous classe

  9. #9
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par seb888
    public class adresse2 extends adresse
    {
    private String pays;

    adresse2(int num, String rue, String pays){
    super(num, rue); <----------- ici, tu n'accèdes pas à l'attribut privé num de la super classe mais au paramètre d'appel du constructeur !!
    this.pays = pays;
    }

    J'ai pensé que l'attribut private était le plus approprié, mais cela impliquerait que je doive recopier les champs dans la sous classe
    Oui l'attribut private est le plus approprié. Ajoute juste les méthodes getNum/setNum, getRue/setRue pour pouvoir accéder à ces attributs dans la sous classe.

  10. #10
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    en fait dans le constructeur de ta classe dérivée
    super (param, [param])
    appelle le constructeur ( (param, [param])
    de ta classe ancêtre avant tte chose.
    Si tu ne le spécifie pas explictement il appelle le constructeur par défaut.
    Mais il vaut mieux qu'il corresponde au constructeur que tu as appelé pour instancier ta classe fille.
    Sinon tu te fais jeter à la compile.

  11. #11
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Excellent ça : la même réponse en meme temps!

    J'ai pensé que l'attribut private était le plus approprié, mais cela impliquerait que je doive recopier les champs dans la sous classe
    ??? tu en hérite ! Pourquoi tu veux les dupliquer dans ta fille ???
    Tu créés des accessors dont tu vas également hériter et tu oublies ta classe ancêtre dont tu n'a même pas à connaître l'existence, pour travailler avec la classe que tu as instancié!

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    pour acceder aux champs de la super classe dans la classe fille grace aux accesseurs (get/set) comment puisje procéder?

    appeler les méthodes de la classe mère?
    quelle est la syntaxe exacte pour celà?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    arf je vois pardon!! ok je vous remercie tout est clair!! =)

    on y est arrivés!

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

Discussions similaires

  1. [Débutant] constructeur d'une sous sous classe
    Par stracoma dans le forum VB.NET
    Réponses: 2
    Dernier message: 31/05/2015, 18h54
  2. [Language]Constructeur==> Null pointer?
    Par Chiwawa dans le forum Langage
    Réponses: 8
    Dernier message: 14/05/2005, 22h51
  3. [Language][constructeur] - attributs ou accesseur
    Par grand's dans le forum Langage
    Réponses: 6
    Dernier message: 26/04/2005, 08h47
  4. [Language]Constructeur dynamique
    Par s.grenet dans le forum Langage
    Réponses: 4
    Dernier message: 21/03/2005, 13h18
  5. sous-classe de JPanel ou de JSpinner ?
    Par etiennegaloup dans le forum Composants
    Réponses: 3
    Dernier message: 06/03/2005, 18h55

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