Question

    

Cette question a déjà une réponse ici:

         

Quelle est la différence d'accessibilité des variables suivantes en Java?

public class Joe {
    public int a;
    protected int b;
    private int b;
    int c;
}

Je suis très intéressé par ce que fait le dernier.

Était-ce utile?

La solution

  • public: lecture / écriture pour tous
  • protected: en lecture / écriture pour instances des sous-classes et à partir du package englobant
  • private: en lecture / écriture pour toutes les instances de la classe et instance interne ou externe (englobante)
  • int c: paquet-private, en lecture / écriture pour toutes les classes dans le même package

Voir le JLS . pour plus de détails

EDIT: Ajout du commentaire pour protected indiquant que l'accès est accordé à l'intérieur du même package, vous avez tout à fait raison. Également ajouté un commentaire pour privé. Je me souviens maintenant ... ;-)

Autres conseils

Désolé de répondre aux corrections d'une réponse précédente mais je n'ai pas assez de réputation pour modifier directement ...

  • public - accessible en lecture / écriture pour tous
  • protected - en lecture / écriture pour instances sous-classes et toutes les classes dans le même paquet
  • int c: package-private, en lecture / écriture pour toutes les classes à l'intérieur même paquet
  • private - en lecture / écriture pour tout membre de cette classe et les classes internes (le cas échéant)

Il est préférable de commander les modificateurs d'accès de cette manière, de l'accès le plus large (public) au plus étroit (privé), sachant qu'en passant d'étroit à large, vous ne perdez aucune possibilité.

Cela est particulièrement important pour "protégé", car il est souvent mal compris que les classes d'un même package peuvent également accéder aux membres protégés d'une classe (et pas seulement de ses sous-classes).

J'essaie d'éviter complètement l'accès au paquet (le dernier accès que vous avez mentionné).

J'aime garder les cours autonomes. Si une autre classe a besoin d'accéder à quelque chose dans ma classe, il devrait être public (et cela devrait être par une méthode, pas un attribut). Sinon, je pense que vous avez cassé encapsulation , comme expliqué dans Abstraction ou masquage d'informations par VS .

Tous ces éléments sont des protections contre la compilation, elles peuvent être facilement remplacées par réflexion lors de l'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top