¿Qué son los modificadores de acceso?
¿Alguna vez ha querido definir cómo las personas accederían a algunas de sus propiedades? No querrás que nadie use tu ropa interior. Sin embargo, sus amigos cercanos y familiares pueden usar su suéter y tal vez su automóvil.
De manera similar a cómo establece un nivel de acceso a sus posesiones, Java también controla el acceso. Desea definir el nivel de acceso para variables, métodos y clases dependiendo de qué otras clases desea acceder a ellos.
Java proporciona 4 niveles de modificadores de acceso. Esto significa que puede modificar el acceso a una variable, método o clase de 4 formas. Estas 4 formas son privada, pública, protegida y predeterminada.
Estos modificadores de acceso se pueden aplicar a campos, métodos y clases (las clases son un caso especial, las veremos al final de este artículo). Aquí hay una descripción general rápida1 de lo que Access Levels
son para cada uno Access Modifier
:
Referencia de la tabla de modificadores de acceso:

Modificador de acceso privado
Permite que solo se acceda a una variable o método en la clase en la que se creó. Ninguna otra clase más allá de la clase que creó la variable o el método puede acceder a él. Esto es muy similar a sus órganos internos. Solo son accesibles para el propietario. Para hacer que una variable o método sea privado, simplemente agregue la palabra clave privada antes del tipo de variable o método. Usemos privado en un ejemplo de codificación. Si un banco quiere proporcionar una tasa de interés del 10% sobre sus préstamos, se aseguraría de que la tasa de interés variable (supongamos int int_rate;
) se mantenga privada para que ninguna otra clase intente acceder a ella y cambiarla. Por ejemplo;
private String name;
El ejemplo anterior crea una variable llamada nombre y garantiza que solo sea accesible dentro de la clase desde la que se creó.
Otro ejemplo de un método es
private void setAge(){ System.out.println("Set Age"); }
El ejemplo anterior asegura que el método setAge sea accesible solo dentro de la clase desde la cual fue creado y en ningún otro lugar.
Modificador de acceso público
El modificador de acceso público es el opuesto directo del modificador de acceso privado. Una clase, método o variable se puede declarar como pública y significa que es accesible desde cualquier clase. El modificador de acceso público se puede comparar con una escuela pública donde cualquiera puede solicitar la admisión y ser admitido.
Se puede acceder a una clase, método o variable pública desde cualquier otra clase en cualquier momento.
Por ejemplo, para declarar una clase como pública, todo lo que necesita es:
public class Animal{ }
Como tal, cualquier otra clase puede acceder a la clase Animal.
public int age; public int getAge(){ }
Arriba hay formas de especificar una variable y un método como públicos.
El modificador de acceso predeterminado
El modificador de acceso predeterminado es diferente de todos los demás modificadores de acceso en que no tiene una palabra clave. Para usar el modificador de acceso predeterminado, simplemente no use ninguno de los otros modificadores de acceso y eso simplemente significa que está usando un modificador de acceso predeterminado.
Por ejemplo, para usar el modificador de acceso predeterminado para una clase, usa
class Bird{ }
Básicamente, esto significa que está utilizando el modificador de acceso predeterminado. El modificador de acceso predeterminado permite que otras clases dentro del mismo paquete puedan acceder a una variable, método o clase. Un paquete es una colección de clases relacionadas en un directorio de archivos. Para obtener más información sobre paquetes, consulte la sección sobre paquetes.
Cualquier variable, método o clase declarada para usar el modificador de acceso predeterminado no puede ser accedida por ninguna otra clase fuera del paquete desde el cual fue declarado.
int age; void setNewAge(){ }
A continuación se muestran algunas formas de utilizar el modificador de acceso predeterminado para una variable o método. No olvide que el modificador de acceso predeterminado no tiene una palabra clave. La ausencia de los otros 3 modificadores de acceso significa que está utilizando el modificador de acceso predeterminado.
Modificador de acceso protegido
El modificador de acceso protegido está estrechamente relacionado con el modificador de acceso predeterminado. El modificador de acceso protegido tiene las propiedades del modificador de acceso predeterminado pero con una pequeña mejora.
Una variable y un método son los únicos que utilizan el modificador de acceso protegido. La pequeña mejora es que una clase fuera del paquete de clases desde el cual se declaró la variable o método puede acceder a dicha variable o método. Sin embargo, esto SÓLO es posible si hereda de la Clase.
La clase de otro paquete que puede ver variables o métodos protegidos debe haber extendido la clase que creó las variables o métodos.
Tenga en cuenta que sin la ventaja de la herencia, un modificador de acceso predeterminado tiene exactamente el mismo acceso que un modificador de acceso protegido.
A continuación, se muestran ejemplos del uso del modificador de acceso protegido:
protected int age; protected String getName(){ return "My Name is You"; }
Modificadores de acceso en clases
De forma predeterminada, las clases solo pueden tener 2 modificadores:
- público
- sin modificador (modificador predeterminado)
Entonces, ¿esto significa que las clases nunca se pueden configurar en private
o protected
?
Esto es lógico, ¿por qué querrías hacer una clase privada? Ninguna otra clase podría usarlo. Pero, a veces, puede integrar una clase en otra clase. Estas clases especiales`` inner classes
se pueden configurar como privadas o protegidas para que solo la clase circundante pueda acceder a ellas:
public class Car { private String brand; private Engine engine; // ... private class Engine { // ... } }
En el ejemplo anterior, solo la Car
clase puede usar la Engine
clase. Esto puede resultar útil en algunos casos.
Otras clases nunca se pueden establecer en protected
o private
, porque no tiene sentido. El protected
modificador de acceso se usa para hacer cosas package-private
pero con la opción de ser accesible a las subclases. No existe un concepto como 'subpaquetes' o 'herencia de paquetes' en java.