Los modificadores de acceso de Java se utilizan para proporcionar control de acceso en Java. Java proporciona control de acceso a través de tres palabras clave: private, protected y public. No siempre es necesario utilizar estos modificadores de acceso, así que tenemos otro llamado “default access“, “package-private” o “no modifier“.
Modificadores de Acceso en Java
Podemos utilizar modificadores de acceso de Java con clases, así como con variables de clase y métodos. Solo se nos permite usar modificadores de acceso “public” o “default” con clases de Java.
- Si una clase es “public”, entonces podemos acceder a ella desde cualquier lugar, es decir, desde cualquier otra clase ubicada en cualquier otro paquete, etc.
- Solo podemos tener una clase “public” en un archivo fuente y el nombre del archivo debe ser igual al nombre de la clase pública.
- Si la clase tiene “default access”, entonces solo se puede acceder desde otras clases en el mismo paquete.
Modificadores de Acceso en Java con Miembros de Clase
Podemos tener los cuatro modificadores de acceso para las variables y métodos miembros de la clase. Sin embargo, las reglas del modificador de acceso del miembro se aplican después de las reglas de acceso a nivel de clase. Por ejemplo, si una clase tiene acceso predeterminado, no será visible en otros paquetes y, por lo tanto, los métodos y variables de la clase tampoco serán visibles. Analizaremos cada uno de ellos por separado y luego mostraremos el uso de los modificadores de acceso en Java con un programa simple.
Modificadores de Acceso en Java – palabra clave public
Si un miembro de la clase es “público”, entonces se puede acceder desde cualquier lugar. La variable o método del miembro se accede globalmente. Esta es la forma más sencilla de proporcionar acceso a los miembros de la clase. Sin embargo, debemos tener cuidado al usar esta palabra clave con variables de clase, de lo contrario, cualquiera puede cambiar los valores. Por lo general, las variables de clase se mantienen como privadas y se proporcionan métodos getter-setter para trabajar con ellas.
Modificadores de Acceso en Java – palabra clave private
Si un miembro de la clase es “private”, entonces solo será accesible dentro de la misma clase. Este es el acceso más restringido y el miembro de la clase no será visible para el mundo exterior. Por lo general, mantenemos las variables de clase como privadas y los métodos que están destinados a ser utilizados solo dentro de la clase como privados.
Modificadores de Acceso en Java – palabra clave protected
Si el miembro de la clase es “protected”, entonces solo será accesible para las clases en el mismo paquete y para las subclases. Este modificador es menos restrictivo que private pero más restrictivo que el acceso público. Por lo general, utilizamos esta palabra clave para asegurarnos de que las variables de clase sean accesibles solo para las subclases.
Modificadores de Acceso en Java – acceso por defecto
Si un miembro de clase no tiene ningún modificador de acceso especificado, entonces se trata con acceso predeterminado. Las reglas de acceso son similares a las de las clases y el miembro de clase con acceso predeterminado será accesible solo para las clases en el mismo paquete. Este acceso es más restringido que el público y protegido, pero menos restringido que el privado. (Menos accesible) \(\text{private} < \text{default} < \text{protected} < \text{public}\) (Más accesible) La siguiente tabla resume los modificadores de acceso anteriores con respecto a diferentes clases en el mismo paquete u otros paquetes y subclases. \(\text{}\) Escribamos algunas clases simples donde veremos los modificadores de acceso de Java en acción. \(\text{TestA.java}\) \(\text{
package com.journaldev.access;
class TestA {
public void methodPublic(){
methodPrivate();
}
protected void methodProtected(){
methodPrivate();
}
void methodDefault(){
methodPrivate();
}
private void methodPrivate(){}
}
}\) Tenga en cuenta que la clase TestA tiene acceso predeterminado y el método de clase privado es accesible para todas las demás partes de la misma clase. \(\text{TestB.java}\) \(\text{
package com.journaldev.access;
import com.journaldev.access.TestA;
public class TestB {
public static void main(String args[]) {
new TestA().methodPublic();
new TestA().methodProtected();
new TestA().methodDefault();
}
public void methodPublic() {
}
protected void methodProtected() {
}
void methodDefault() {
}
private void methodPrivate() {
}
}
}\) Tenga en cuenta que TestB está en el mismo paquete que la clase TestA y, por lo tanto, puede acceder a los miembros de su clase. Los miembros privados no son accesibles, pero todos los demás miembros son accesibles debido al mismo paquete. \(\text{TestC.java}\) \(\text{
package com.journaldev.access.child;
import com.journaldev.access.TestB;
public class TestC {
public static void main(String[] args) {
new TestB().methodPublic();
}
}
}\) La clase TestB es accesible porque es pública. Solo los miembros públicos de la clase TestB son accesibles porque la clase TestC no está en el mismo paquete ni es una subclase de TestB. \(\text{TestE.java}\) \(\text{
package com.journaldev.util;
import com.journaldev.access.TestB;
public class TestE extends TestB {
public static void main(String[] args) {
new TestB().methodPublic();
new TestB().methodProtected(); // compile time error
}\) // funciona, accediendo al método protegido de la superclase usando la subclase
new TestE().methodProtected();
}
}
Desde que la clase TestE es una subclase de TestB, podemos acceder a los miembros protegidos de TestB a través de la clase hija TestE. Si intentamos acceder al método protegido de la superclase directamente, obtendremos un error en tiempo de compilación. Eso es todo para los modificadores de acceso en Java, es simple de entender. Solo asegúrate de no confundirte con el acceso predeterminado y protegido. Una manera fácil de recordar es que el acceso predeterminado es más restrictivo que el protegido, y los miembros protegidos son accesibles en las subclases. Recientemente, hice un video para explicar detalladamente los modificadores de acceso en Java. Puedes verlo a continuación en YouTube. https://www.youtube.com/watch?v=QKjnbC3UBtY
Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers