Estoy un poco confundido sobre el término "paquete privado" que usa parte de la documentación, junto con el uso de "acceso predeterminado". ¿No son los paquetes privados y el acceso predeterminado ambos sinónimos de protegido?
94
Estoy un poco confundido sobre el término "paquete privado" que usa parte de la documentación, junto con el uso de "acceso predeterminado". ¿No son los paquetes privados y el acceso predeterminado ambos sinónimos de protegido?
default
modificador delante de los métodos (de interfaz). ¡Pero eso no es un modificador de acceso! Todos los modificadores de acceso y sus alcances se visualizan claramente en esta tabla .Respuestas:
Sí, es casi lo mismo. El modificador protegido especifica que solo se puede acceder al miembro dentro de su propio paquete (como con package-private) y, además , mediante una subclase de su clase en otro paquete.
fuente
public static final
, para un método espublic abstract
, para una enumeración o anotación espublic
y para una clase espublic static
El modificador de acceso "predeterminado" (aquel en el que ninguno de ellos se proporciona explícitamente) es "paquete-privado", lo que significa que solo las cosas del mismo paquete pueden acceder a ellos. Sin embargo, estar en el mismo paquete no implica nada sobre la relación de herencia entre clases, es puramente una convención de nomenclatura.
"Protegido" significa que no sólo las clases del mismo paquete, sino también las subclases (independientemente del paquete en el que se encuentren esas subclases) podrán acceder a él.
fuente
El acceso predeterminado para las clases es el paquete privado, sin embargo, el acceso predeterminado para los miembros de la interfaz es público.
p.ej
Las reglas de acceso predeterminadas para las interfaces no son las mismas que las de las clases.
fuente
El acceso predeterminado y el paquete privado son sinónimos. Un objeto también puede acceder a miembros protegidos de los objetos cuyas clases están en el mismo paquete. Un objeto también puede acceder a miembros protegidos de sus superclases sin una condición sobre su paquete. Como ejemplo concreto:
fuente
'Paquete privado' y el acceso predeterminado son los mismos. En las primeras versiones del compilador alrededor de 1.1.2 / 3, 'paquete' era un modificador permitido, pero ignorado, lo que significa lo mismo que sin modificador, es decir, 'paquete privado'. Poco tiempo después hubo una moda de corta duración para poner
/*package*/
(como comentario) en tales situaciones. De manera similar, en ese momento se podían declarar cosas como clases sincronizadas, aunque nuevamente no hubo ningún efecto semántico real.Ninguno de ellos es lo mismo que 'protegido', que se extiende a las clases derivadas en otros paquetes.
fuente
De la especificación del lenguaje Java
fuente
default y package-private son iguales, lo que significa que ambos pueden ser usados por cualquier clase hasta que estén en el mismo paquete.
El término paquete-privado , en realidad, se denomina con el significado de modificador privado como privado significa que está disponible solo en la misma clase y ninguna otra clase o subclases puede acceder a él dentro del mismo paquete o sin él.
Por lo tanto, paquete privado significa lo mismo que el predeterminado .
fuente