1. Información general
En el lenguaje de programación Java, los campos, constructores, métodos y clases se pueden marcar con modificadores de acceso. En este tutorial, hablaremos sobre el modificador de acceso privado en Java.
2. La palabra clave
El modificador de acceso privado es importante porque permite la encapsulación y el ocultamiento de información, que son principios básicos de la programación orientada a objetos. La encapsulación es responsable de agrupar métodos y datos, mientras que la ocultación de información es una consecuencia de la encapsulación: oculta la representación interna de un objeto.
Lo primero que hay que recordar es que los elementos declarados como privados solo pueden ser accedidos por la clase en la que están declarados .
3. Campos
Ahora, veremos algunos ejemplos de código simples para comprender mejor el tema.
Primero, creemos una clase de Empleado que contenga un par de variables de instancia privadas :
public class Employee { private String privateId; private boolean manager; //... }
En este ejemplo, marcamos la variable privateId como privada porque queremos agregar algo de lógica a la generación de id. Y, como podemos ver, hicimos lo mismo con el atributo de administrador porque no queremos permitir la modificación directa de este campo.
4. Constructores
Creemos ahora un constructor privado :
private Employee(String id, String name, boolean managerAttribute) { this.name = name; this.privateId = id + "_ID-MANAGER"; }
Al marcar nuestro constructor como privado , podemos usarlo solo desde dentro de nuestra clase.
Agreguemos un método estático que será nuestra única forma de usar este constructor privado desde fuera de la clase Employee :
public static Employee buildManager(String id, String name) { return new Employee(id, name, true); }
Ahora podemos obtener una instancia de administrador de nuestra clase Empleado simplemente escribiendo:
Employee manager = Employee.buildManager("123MAN","Bob");
Y detrás de escena, por supuesto, el método buildManager llama a nuestro constructor privado .
5. Métodos
Agreguemos ahora un método privado a nuestra clase:
private void setManager(boolean manager) { this.manager = manager; }
Y supongamos que, por alguna razón, tenemos una regla arbitraria en nuestra empresa en la que solo un empleado llamado “Carl” puede ser ascendido a gerente, aunque otras clases no lo saben. Crearemos un método público con algo de lógica para manejar esta regla que llama a nuestro método privado :
public void elevateToManager() { if ("Carl".equals(this.name)) { setManager(true); } }
6. privado en acción
Veamos un ejemplo de cómo usar nuestra clase Empleado desde fuera:
public class ExampleClass { public static void main(String[] args) { Employee employee = new Employee("Bob","ABC123"); employee.setPrivateId("BCD234"); System.out.println(employee.getPrivateId()); } }
Después de ejecutar ExampleClass , veremos su salida en la consola:
BCD234_ID
En este ejemplo, usamos el constructor público y el método público changeId (customId) porque no podemos acceder a la variable privada privateId directamente.
Veamos qué sucede si intentamos acceder a un método, constructor o variable privado desde fuera de nuestra clase Employee :
public class ExampleClass { public static void main(String[] args) { Employee employee = new Employee("Bob","ABC123",true); employee.setManager(true); employee.privateId = "ABC234"; } }
Obtendremos errores de compilación para cada una de nuestras declaraciones ilegales:
The constructor Employee(String, String, boolean) is not visible The method setManager(boolean) from the type Employee is not visible The field Employee.privateId is not visible
7. Clases
Hay un caso especial en el que podemos crear una clase privada , como una clase interna de alguna otra clase. De lo contrario, si declaramos una clase externa como privada , estaríamos prohibiendo que otras clases accedan a ella, haciéndola inútil:
public class PublicOuterClass { public PrivateInnerClass getInnerClassInstance() { PrivateInnerClass myPrivateClassInstance = this.new PrivateInnerClass(); myPrivateClassInstance.id = "ID1"; myPrivateClassInstance.name = "Bob"; return myPrivateClassInstance; } private class PrivateInnerClass { public String name; public String id; } }
En este ejemplo, creamos una clase interna privada dentro de nuestra PublicOuterClass especificando el modificador de acceso privado .
Debido a que usamos la palabra clave privada , si, por alguna razón, intentamos crear una instancia de nuestra PrivateInnerClass desde fuera de PublicOuterClass , el código no se compilará y veremos el error:
PrivateInnerClass cannot be resolved to a type
8. Conclusión
En este tutorial rápido, discutimos el modificador de acceso privado en Java. Es una buena forma de lograr la encapsulación, lo que lleva a ocultar información. Como resultado, podemos asegurarnos de exponer solo los datos y comportamientos que queremos a otras clases.
Como siempre, el ejemplo de código está disponible en GitHub.