Especificadores de acceso en Java: hay 4 especificadores de acceso en java, a saber, privado, paquete privado (predeterminado), protegido y público en orden de acceso creciente.
Privado : cuando está desarrollando alguna clase y desea que un miembro de esta clase no quede expuesto fuera de esta clase, debe declararlo como privado. Se puede acceder a los miembros privados solo en la clase donde están definidos, es decir, encerrando la clase. Se puede acceder a los miembros privados en 'esta' referencia y también en otras instancias de clase que incluyen a estos miembros, pero solo dentro de la definición de esta clase.
Paquete privado (predeterminado) : este especificador de acceso proporcionará el acceso especificado por el especificador de acceso privado además del acceso que se describe a continuación.
Cuando está desarrollando algún paquete y, por lo tanto, alguna clase (por ejemplo, Clase1) dentro de él, puede usar el especificador de acceso predeterminado (no es necesario mencionarlo explícitamente), para exponer al miembro dentro de la clase, a otras clases dentro de su (mismo) paquete. En estas otras clases (dentro del mismo paquete), puede acceder a estos miembros predeterminados en la instancia de Class1. También puede acceder a estos miembros predeterminados dentro de las subclases de Class1, digamos Class2 (en esta referencia o en la instancia de Class1 o en la instancia de Class2).
Básicamente, dentro del mismo paquete puede acceder a los miembros predeterminados en la instancia de clase directamente o en 'esta' referencia en subclases.
protegido : este especificador de acceso proporcionará el acceso especificado por el especificador de acceso privado del paquete además del acceso que se describe a continuación.
Cuando desarrolle algún paquete y, por lo tanto, alguna clase (por ejemplo, Clase1) dentro de él, debe usar un especificador de acceso protegido para el miembro de datos dentro de Clase1 si no desea que se acceda a este miembro fuera de su paquete (por ejemplo, en el paquete del consumidor de su paquete (es decir, el cliente que usa sus API) en general, pero desea hacer una excepción y permitir el acceso a este miembro solo si el cliente escribe una clase, digamos Clase2, que extiende Clase1. Por lo tanto, en general, los miembros protegidos serán accesibles en 'esta' referencia en clases derivadas, es decir, Clase2 y también en instancias explícitas de Clase2.
Tenga en cuenta:
- No podrá acceder al miembro protegido heredado de Class1 en Class2, si intenta acceder a él en una instancia explícita de Class1, aunque se hereda en él.
- Cuando escribe otra clase Class3 dentro del mismo / diferente paquete que extiende Class2, el miembro protegido de Class1 estará accesible en esta referencia y también en la instancia explícita de Class3. Esto será cierto para cualquier jerarquía que se extienda, es decir, el miembro protegido seguirá siendo accesible en esta referencia o instancia de clase extendida. Tenga en cuenta que en Class3, si crea una instancia de Class2, no podrá acceder al miembro protegido de Class1 aunque se herede.
Entonces, en resumen, se puede acceder a los miembros protegidos en otros paquetes, solo si alguna clase de este otro paquete, extiende la clase que encierra a este miembro protegido y se accede al miembro protegido en 'esta' referencia o instancias explícitas de clase extendida, dentro de la definición de extendida clase.
public : Este especificador de acceso proporcionará el acceso especificado por el especificador de acceso protegido además del acceso que se describe a continuación.
Cuando está desarrollando algún paquete y, por lo tanto, alguna clase (por ejemplo, Clase1) dentro de él, debe usar un especificador de acceso público para el miembro de datos dentro de Clase1 si desea que este miembro sea accesible en otros paquetes, por ejemplo, en la Clase 1 creada en alguna clase de otra paquete. Básicamente, este especificador de acceso debe usarse cuando intente exponer su miembro de datos al mundo sin ninguna condición.
private
se esconde de otras clases dentro del paquete.public
expone a clases fuera del paquete.protected
es una versiónpublic
restringida solo a subclases.