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 :

Question basique - var d'instance de portée protected


Sujet :

avec Java

  1. #1
    Membre régulier
    Femme Profil pro
    Analyste-developpeur java
    Inscrit en
    Mai 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste-developpeur java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 135
    Points : 76
    Points
    76
    Par défaut Question basique - var d'instance de portée protected
    Bonjour,

    Je suis en train de revoir des bases de java. Et j'ai une petite question de base.
    En principe une variable d'une superclasse de portée protected est accessible dans cette même classe et dans ses filles mais elle ne l'est pas ailleurs (comme dans une classe Main) et il faut passer par ses getters setters pour la modifier non?

    Je m'interroge parce qu'eclipse permet tous les accès de n'importe où dans le même package aux variables d'instance de portée protected des classes mères et filles.

    Merci de vos réponses

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Non, c'est une idée répandue.

    Le mot-clé "protected" donne une visibilité de la variable à la classe contenant la déclaration, au package de celle-ci, ainsi qu'aux filles.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Une autre manière de le voir, c'est que les droits d'accès sont de plus en plus (ou de moins en moins) permissifs :

    - private : accessible à la classe en cours.
    - default (aussi appelé package-private, et obtenu sans mot-clé) : private + accessibles aux classes du même package.
    - protected : default + accessible aux classes filles.
    - public : protected + accessible de partout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre régulier
    Femme Profil pro
    Analyste-developpeur java
    Inscrit en
    Mai 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste-developpeur java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 135
    Points : 76
    Points
    76
    Par défaut
    Merci beaucoup à vous pour ces précisions!
    Dans ce cas utiliser les getters setter dans et hors de la classe devient plus une best practice qu'une vraie exigence j'imagine.

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    il n'est pas tout à fait exact de dire que protected est accessible aux classes filles.
    Il est accessible uniquement sur l'instance courante (dans le cas de proteted sur des membres d'instance)
    en ce sens public n'est pas à proprement parler une extension de protected.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    il n'est pas tout à fait exact de dire que protected est accessible aux classes filles.
    Il est accessible uniquement sur l'instance courante (dans le cas de proteted sur des membres d'instance)
    Je suis pas sûr de comprendre. Tu peux donner un exemple ?

    Citation Envoyé par professeur shadoko Voir le message
    en ce sens public n'est pas à proprement parler une extension de protected.
    Bah, si, de toute façon, public étant accessible partout, c'est une extension de tout ce qu'on veut.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Je suis pas sûr de comprendre. Tu peux donner un exemple ?
    Bah, si, de toute façon, public étant accessible partout, c'est une extension de tout ce qu'on veut.
    ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    package org.smurf.famille ;
     
    class Fille extends com.bidochon.Mere {
     
       public void modifieMoi(com.bidochon.Mere uneMere) {
          this.champProtectedDeMere = uneMere.champProtectedDeMere ;
       }
    }
    le fonctionnement est très particulier et la distinction entre champ de l'instance hérité et champs d'une autre instance n'est pas triviale , d'où également ma remarque comme quoi ces distinctions ne s'appliquent pas pour public.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ah mais oui je suis con -_-°. J'avais pas changé de package.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Question Basique Gestion Erreur VBA ...
    Par Le_Phasme dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h42
  2. instance et port
    Par Magohamoths dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/09/2005, 09h31
  3. Question basique
    Par PatLeOuf dans le forum C++
    Réponses: 1
    Dernier message: 23/03/2005, 10h57
  4. Réponses: 5
    Dernier message: 04/03/2005, 12h14

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