Je suis un peu confus au sujet du terme «package privé» utilisé par une partie de la documentation, ainsi que de l'utilisation de «l'accès par défaut». Les accès privés et par défaut ne sont-ils pas tous deux synonymes de protection?
java
terminology
protected
access-modifiers
package-private
TortueToes
la source
la source
default
modificateur devant les méthodes (d'interface). Mais ce n'est pas un modificateur d'accès! Tous les modificateurs d'accès et leurs portées sont clairement visualisés dans ce tableau .Réponses:
Oui, c'est presque pareil. Le modificateur protected spécifie que le membre n'est accessible que dans son propre package (comme avec package-private) et, en plus , par une sous-classe de sa classe dans un autre package.
la source
public static final
, pour une méthode estpublic abstract
, pour une énumération ou une annotation estpublic
et pour une classe ellepublic static
Le modificateur d'accès "par défaut" (celui où aucun d'entre eux n'est explicitement donné) est "package-private", ce qui signifie que seules les choses du même package peuvent y accéder. Cependant, être dans le même package n'implique rien sur la relation d'héritage entre les classes - c'est purement une convention de dénomination.
«Protégé» signifie que non seulement les classes du même package, mais aussi les sous-classes (quel que soit le package dans lequel se trouvent ces sous-classes) pourront y accéder.
la source
L'accès par défaut pour les classes est privé du package, mais l'accès par défaut pour les membres de l' interface est public.
par exemple
Les règles d'accès par défaut pour les interfaces ne sont pas les mêmes que pour les classes.
la source
L'accès au package privé et par défaut sont des synonymes. Un objet peut également accéder au membre protégé des objets dont les classes sont dans le même package. Un objet peut également accéder au membre protégé de ses superclasses sans condition concernant leur package. A titre d'exemple concret:
la source
'Package privé' et l'accès par défaut sont identiques. Dans les premières versions du compilateur vers la 1.1.2 / 3, «package» était un modificateur autorisé, mais ignoré, ce qui signifie la même chose qu'aucun modificateur, c'est-à-dire «package private». Peu de temps après, il y eut une mode de courte durée pour mettre
/*package*/
(en commentaire) dans de telles situations. De même, à ce moment-là, vous pouviez déclarer des choses comme des classes synchronisées, bien que là encore, il n'y ait pas eu d'effet sémantique réel.Aucun d'eux n'est identique à «protected», qui s'étend aux classes dérivées dans d'autres packages.
la source
À partir de Java Language Spec
la source
default et package-private sont identiques, ce qui signifie que les deux peuvent être utilisés par n'importe quelle classe jusqu'à ce qu'ils soient dans le même package.
Le terme package-private , en fait, est appelé par le sens du modificateur privé car private signifie qu'il n'est disponible que dans la même classe et qu'aucune autre classe ou sous-classe ne peut y accéder dans le même package ou sans.
Par conséquent, package-private signifie la même chose que par défaut .
la source