En Java, las clases pueden tener diferentes niveles de acceso que determinan su visibilidad y accesibilidad desde otras clases. Los dos niveles de acceso más comunes para las clases son público (public) y paquete (package-private).
Clases públicas:
Acceso Universal:
- Una clase marcada con el modificador
public
puede ser accedida desde cualquier otra clase en cualquier paquete. Es decir, su visibilidad es global dentro del proyecto.
Uso Típico:
- Las clases públicas se utilizan cuando quieres que la clase sea accesible para todas las demás clases, independientemente de su ubicación en la estructura del proyecto.
Declaración:
- Se declara con el modificador
public
antes de la palabra claveclass
. Ejemplo:
public class MiClasePublica { // Código de la clase }
Restricciones:
- En un archivo
.java
, si existe una clase pública, el nombre del archivo debe coincidir con el nombre de la clase pública. Por ejemplo, si la clase se llamaMiClasePublica
, el archivo debe llamarseMiClasePublica.java
.
Clases privadas:
Acceso Limitado al Paquete:
- Una clase sin un modificador de acceso explícito (como
public
oprivate
) es una clase paquete-privada (también conocida como default o package-private). Esto significa que solo es accesible por otras clases en el mismo paquete.
Uso Típico:
- Las clases paquete-privadas se utilizan cuando quieres limitar la visibilidad de la clase a otras clases que están en el mismo paquete, protegiendo así la implementación interna del módulo o componente.
Declaración:
- Simplemente se declara sin ningún modificador de acceso. Ejemplo:
class MiClasePaquetePrivada { // Código de la clase }
Restricciones:
- No existen restricciones en cuanto al nombre del archivo. Puedes tener múltiples clases paquete-privadas en un mismo archivo y el nombre del archivo no necesita coincidir con ninguna de estas clases.
Ejemplo Comparativo
Supongamos que tienes el siguiente proyecto Java con dos paquetes: com.ejemplo.paquete1
y com.ejemplo.paquete2
.
Clase Pública
// Archivo: com/ejemplo/paquete1/ClasePublica.java package com.ejemplo.paquete1; public class ClasePublica { // Código de la clase }
Clase Paquete-Privada
// Archivo: com/ejemplo/paquete1/ClasePaquetePrivada.java package com.ejemplo.paquete1; class ClasePaquetePrivada { // Código de la clase }
Acceso desde otra clase en el mismo paquete
// Archivo: com/ejemplo/paquete1/OtraClase.java package com.ejemplo.paquete1; public class OtraClase { ClasePublica obj1 = new ClasePublica(); // Acceso permitido ClasePaquetePrivada obj2 = new ClasePaquetePrivada(); // Acceso permitido }
Acceso desde una clase en otro paquete
// Archivo: com/ejemplo/paquete2/OtraClase.java package com.ejemplo.paquete2; import com.ejemplo.paquete1.ClasePublica; public class OtraClase { ClasePublica obj1 = new ClasePublica(); // Acceso permitido // ClasePaquetePrivada obj2 = new ClasePaquetePrivada(); // Acceso NO permitido }
Las clases públicas pueden ser accedidas desde cualquier otra clase en cualquier paquete, mientras que las clases paquete-privadas solo pueden ser accedidas desde otras clases dentro del mismo paquete.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.