¿Qué es una clase privada y una clase públca en Java?

Tiempo de lectura: 2 minutos

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 clave class. 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 llama MiClasePublica, el archivo debe llamarse MiClasePublica.java.

Clases privadas:

Acceso Limitado al Paquete:

  • Una clase sin un modificador de acceso explícito (como public o private) 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.

Deja un comentario