Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

¿Cuál es la diferencia en la accesibilidad de las siguientes variables en Java?

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

Estoy más interesado en lo que está haciendo el último.

¿Fue útil?

Solución

  • público: lectura / escritura para cualquier persona
  • protegido: lectura / escritura para instancias de subclases y desde el paquete adjunto
  • privado: lectura / escritura para cualquier instancia de la clase e instancia interna o externa (envolvente)
  • int c: paquete privado, lectura / escritura para todas las clases dentro del mismo paquete

Consulte JLS para más detalles

EDITAR: se agregó el comentario para protegido indicando que el acceso se otorga desde el mismo paquete, ustedes tienen toda la razón. También se agregó comentario para privado. Ahora recuerdo ... ;-)

Otros consejos

Perdón por responder las correcciones a una respuesta anterior, pero no tengo suficiente reputación para modificar directamente ...

  • público: lectura / escritura para cualquier persona
  • protegido - lectura / escritura para subclases de instancias y todas las clases dentro del mismo paquete
  • int c: paquete-privado, lectura / escritura para todas las clases dentro mismo paquete
  • privado: lectura / escritura para cualquier miembro de esa clase y clases internas (si las hay)

Es mejor ordenar los modificadores de acceso de esta manera, desde el acceso más amplio (público) hasta el más estrecho (privado), sabiendo que al pasar de estrecho a amplio, no pierde ninguna posibilidad.

Eso es particularmente importante para "protegido", donde a menudo se entiende mal que las clases en el mismo paquete también pueden acceder a miembros protegidos de una clase (no solo sus subclases).

Intento evitar el acceso a nivel de paquete por completo (el último acceso que menciona).

Me gusta mantener las clases autónomas. Si otra clase necesita acceso a algo en mi clase, debería ser público (y debería ser por un método, no un atributo). De lo contrario, siento que has roto encapsulación , como se explica en Abstracción VS Ocultación de información VS Encapsulación .

Y todas estas son protecciones de tiempo de compilación, pueden anularse fácilmente mediante la reflexión en tiempo de ejecución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top