1. Información general
En este tutorial, repasaremos los modificadores de acceso en Java, que se utilizan para configurar el nivel de acceso a clases, variables, métodos y constructores.
En pocas palabras, hay cuatro modificadores de acceso: público , privado , protegido y predeterminado (sin palabra clave).
Antes de comenzar, observemos que una clase de nivel superior solo puede usar modificadores de acceso públicos o predeterminados . A nivel de miembro, podemos usar los cuatro.
2. Por defecto
Cuando no usamos ninguna palabra clave explícitamente, Java establecerá un acceso predeterminado a una clase, método o propiedad determinados. El modificador de acceso predeterminado también se llama paquete-privado , lo que significa que todos los miembros son visibles dentro del mismo paquete pero no son accesibles desde otros paquetes:
package com.baeldung.accessmodifiers; public class SuperPublic { static void defaultMethod() { ... } }
defaultMethod () es accesible en otra clase del mismo paquete:
package com.baeldung.accessmodifiers; public class Public { public Public() { SuperPublic.defaultMethod(); // Available in the same package. } }
Sin embargo, no está disponible en otros paquetes.
3. Público
Si agregamos la palabra clave pública a una clase, método o propiedad, la pondremos a disposición de todo el mundo , es decir, todas las demás clases en todos los paquetes podrán usarla. Este es el modificador de acceso menos restrictivo:
package com.baeldung.accessmodifiers; public class SuperPublic { public static void publicMethod() { ... } }
publicMethod () está disponible en otro paquete:
package com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; public class AnotherPublic { public AnotherPublic() { SuperPublic.publicMethod(); // Available everywhere. Let's note different package. } }
Para obtener más detalles sobre cómo se comporta la palabra clave pública cuando se aplica a una clase, interfaz, clase pública anidada o interfaz y método, consulte el artículo dedicado.
4. Privado
Cualquier método, propiedad o constructor con la palabra clave privada es accesible solo desde la misma clase . Este es el modificador de acceso más restrictivo y es fundamental para el concepto de encapsulación. Todos los datos estarán ocultos del mundo exterior:
package com.baeldung.accessmodifiers; public class SuperPublic { static private void privateMethod() { ... } private void anotherPrivateMethod() { privateMethod(); // available in the same class only. } }
Este artículo más detallado mostrará cómo se comporta la palabra clave privada cuando se aplica a un campo, constructor, método y a una clase interna.
5. Protegido
Entre los niveles de acceso público y privado , existe el modificador de acceso protegido .
Si declaramos un método, propiedad o constructor con la palabra clave protegida , podemos acceder al miembro desde el mismo paquete (como con el nivel de acceso paquete-privado ) y además de todas las subclases de su clase , incluso si se encuentran en otros paquetes:
package com.baeldung.accessmodifiers; public class SuperPublic { static protected void protectedMethod() { ... } }
protectedMethod () está disponible en subclases (independientemente del paquete):
package com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; public class AnotherSubClass extends SuperPublic { public AnotherSubClass() { SuperPublic.protectedMethod(); // Available in subclass. Let's note different package. } }
El artículo dedicado describe más sobre la palabra clave cuando se usa en un campo, método, constructor, clase interna y la accesibilidad en el mismo paquete o en un paquete diferente.
6. Comparación
La siguiente tabla resume los modificadores de acceso disponibles. Podemos ver que una clase, independientemente de los modificadores de acceso utilizados, siempre tiene acceso a sus miembros:
Modificador | Clase | Paquete | Subclase | Mundo |
---|---|---|---|---|
público |
Y | Y | Y | Y |
protegido |
Y | Y | Y | norte |
defecto |
Y | Y | norte | norte |
privado |
Y | norte | norte | norte |
7. Conclusión
En este breve artículo, repasamos los modificadores de acceso en Java.
Es una buena práctica usar el nivel de acceso más restrictivo posible para cualquier miembro para evitar el uso indebido. Siempre debemos usar el modificador de acceso privado a menos que haya una buena razón para no hacerlo.
El nivel de acceso público solo debe usarse si un miembro es parte de una API.
Como siempre, los ejemplos de código están disponibles en Github.