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 :

Visibilité protected et héritage


Sujet :

Langage Java

  1. #1
    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 Visibilité protected et héritage
    Petit résumé d'hier : J'avais acheté un bouquin pour la certification JAVA. Les auteurs avaient marqué un truc bizarre que je trouvais faux. Apres petite discusion ici, je m'étais dit que j'interprétais mal.

    Mais voilà que maintenant je retombe sur cette même ambiguïté, cette fois dans des questions. Je fais un nouveau post parce que j'avais mis l'autre en résolu, mais le doute revient

    Voici la question :
    True or false : if Class Y extends class X, the two classes are in different packages, and class X has a protected méthod called abby(), then any instance of Y may call the abby() method of any other instance of Y.
    Et voici la réponse : claire et limpide cette fois, mais apparemment fausse.
    False. An object that inherits a protected method from a superclass in a different package may call that method on itself but not on other instances of the same class
    Donc cette fois, dites moi ce que vous en pensez. Si c'est bien faux, donnez moi un exemple de ce qu'ils veulent dire.

    Ou alors est-ce que j'ai raison ? ils se plantent ?
    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.

  2. #2
    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
    Points : 3 083
    Points
    3 083
    Par défaut
    Euh, alors la réponse a l'air bonne, et pour expliquer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class X {
        protected void abby() {}
    }
     
    class Y extends X {
        public callMyAbby() {
            this.abby(); // OK
        }
        public callOtherAbby(Y that) {
            that.abby(); // Peut pas !
        }
    }
    Ca doit être ça.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    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
    Points : 3 083
    Points
    3 083
    Par défaut
    Erratum, je viens de tester et ça on peut faire... J'dois pas tout comprendre.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  4. #4
    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
    C'est ce qu'il semblent vouloir dire mais j'ai vérifié (ça me parraissait bizarre) et pourtant ça marche...

    Edit : je me dis aussi que je dois pas tout comprendre mais là je pense plus en faveur du fait qu'ils se sont plantés...

    pourtant un des auteurs n'est ni plus ni moins qu'un des gars qui a fait l'examen de certification de la 1.5...
    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.

  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
    Points : 3 083
    Points
    3 083
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class X {
        protected void abby() {}
    }
     
    class Y extends X {
        public callMyAbby() {
            this.abby(); // OK
        }
        public callOtherAbby(X that) {
            that.abby(); // Peut pas !
        }
    }
    Comme ca par contre c'est juste.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  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
    Comme ça oui, mais c'est pas ce qu'ils écrivent.
    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
    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
    Points : 3 083
    Points
    3 083
    Par défaut
    Après avoir relu 5x, je vote :

    Ils se plantent !

    A vous !
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  8. #8
    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
    Comment tu veux avoir 100% a la certif dans ces conditions :p
    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.

  9. #9
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Tu as essaye en mettant les classes dans deux packages differents ? Ce n'est pas le cas de ton exemple.
    Romain Guy
    Android - Mon livre - Mon blog

  10. #10
    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
    Points : 3 083
    Points
    3 083
    Par défaut
    J'ai testé en mettant dans 2 packages différents, mon exemple ne compile pas, c'est juste pour expliquer le principe.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  11. #11
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par natha
    J'ai testé en mettant dans 2 packages différents, mon exemple ne compile pas, c'est juste pour expliquer le principe.
    ... donc la réponse est bien false non?
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  12. #12
    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
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par pollux007
    Citation Envoyé par natha
    J'ai testé en mettant dans 2 packages différents, mon exemple ne compile pas, c'est juste pour expliquer le principe.
    ... donc la réponse est bien false non?
    Le code ne compile pas à cause de public callMyAbby() {... il faut un type de retour. Si tu fais un code 'java-correct', ça marche, contrairement à ce qui est indiqué.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  13. #13
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Lisez le point 6.6.7 des specifications du langage Java et vous verrez que les auteurs du livre cite dans le premier message ont raison.
    Romain Guy
    Android - Mon livre - Mon blog

  14. #14
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    C'est cool j'avais jamais vu qu'il y avait ce genre spécifications ( )....

    On étudie tout ca et on devient expert!
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  15. #15
    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
    La réponse à la question est donc bien false d'apres la spec.

    MAIS l'explication de la réponse dans le bouquin me semble toujours éronnée :

    An object that inherits a protected method from a superclass in a different package may call that method on itself but not on other instances of the same class
    extrait de la doc pour preuve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public void delta3d(Point3d q) {
    		q.x += this.x;
    		q.y += this.y;
    		q.z += this.z;
    	}
    cette méthode est dans la classe Point3d et x et y sont des protected de la classe Point, qui est dans un autre package.

    On a donc bien une instance de Point3D qui a acces aux champs protected d'une autre instance de Point3D

    qqun pour confirmer ou expliquer ce que j'ai mal compris dans la réponse ?
    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.

  16. #16
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    En lisant les specifications du langage (http://java.sun.com/docs/books/jls/) et de la JVM (http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html), tu peux apprendre ENORMEMENT de choses. C'est pas toujours evident a lire en revanche
    Romain Guy
    Android - Mon livre - Mon blog

  17. #17
    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
    Points : 3 083
    Points
    3 083
    Par défaut
    La question est fausse alors...
    Il ne faut pas dire :

    True or false : if Class Y extends class X, the two classes are in different packages, and class X has a protected méthod called abby(), then any instance of Y may call the abby() method of any other instance of Y.
    mais

    True or false : if Class Y extends class X, the two classes are in different packages, and class X has a protected méthod called abby(), then any instance of Y may call the abby() method of any other instance of X.
    Ou bien ?¿
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  18. #18
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par Gfx
    En lisant les specifications du langage (http://java.sun.com/docs/books/jls/) et de la JVM (http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html), tu peux apprendre ENORMEMENT de choses. C'est pas toujours evident a lire en revanche
    Ouai c'est des sacrés pavés... Pis rien que du fait que les paragraphes sont super larges c'est difficile à lire... Mais autrement c'est bien écrit même si je suis pas totalement bilingue j'arrive bien comprendre la plupart des choses
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  19. #19
    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
    Citation Envoyé par Gfx
    Lisez le point 6.6.7 des specifications du langage Java et vous verrez que les auteurs du livre cite dans le premier message ont raison.
    Je viens de le lire :
    http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.6.7

    Mais je le problème est toujours là. Dans le livre la réponse indique :
    An object that inherits a protected method from a superclass in a different package may call that method on itself but not on other instances of the same class
    Ils parlent bien d'une instance de la même classe, or dans l'exemple des specification :
    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
    package threePoint;
    import points.Point;
    public class Point3d extends Point {
            protected int z;
            public void delta(Point p) {
                    p.x += this.x;          // compile-time error: cannot access p.x
                    p.y += this.y;          // compile-time error: cannot access p.y
     
            }
            public void delta3d(Point3d q) {
                    q.x += this.x;
                    q.y += this.y;
                    q.z += this.z;
            }
    }
    L'exemple utilise des champs mais c'est la même chose avec des méthode... On voit bien que ce n'est pas possible d'accéder aux membres protected sur une instance de la classe parente (sur ce point je crois que tout le monde est d'accord) mais que c'est bien possible sur une autre instance de la même classe (alors que le livre semble dire le contraire)...


    a++


    PS : note pour Satch : tu peux enlever le tag [Résolu] sur un sujet pour le faire remonter si neccessaire

  20. #20
    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
    Bon ben voilà, je suis pas fou, quelqu'un confirme que la réponse est mal formulée...

    PS : merci pour le résolu, je savais pas qu'on pouvait l'enlever.
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Visibilité d'une variable protected
    Par Fr@ncky dans le forum Langage
    Réponses: 12
    Dernier message: 27/12/2012, 12h39
  2. Héritage et protected
    Par coberle dans le forum Débuter
    Réponses: 5
    Dernier message: 24/09/2009, 17h05
  3. [POO] Héritage et visibilité des attributs : pas de "protected" en JS ?
    Par Hervé Saladin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/11/2007, 15h44
  4. Héritage : private/public/protected
    Par le Daoud dans le forum Langage
    Réponses: 5
    Dernier message: 24/10/2007, 13h47
  5. Réponses: 16
    Dernier message: 17/03/2007, 17h31

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