3 minutos

Modificadores de Acceso en Java

Modificadores de Acceso en Java

1. Introducción

En este tutorial, exploraremos los modificadores de acceso en Java, que se utilizan para establecer el nivel de acceso a clases, variables, métodos y constructores.

En pocas palabras, existen cuatro modificadores de acceso: public, private, protected y por defecto (sin palabra clave).

Antes de comenzar, cabe destacar que una clase de nivel superior solo puede utilizar modificadores de acceso public o por defecto. A nivel de miembros, podemos utilizar los cuatro.

2. Por Defecto

Cuando no usamos ninguna palabra clave explícitamente, Java establecerá un acceso por defecto a una clase, método o propiedad en particular. El modificador de acceso por defecto también se llama package-private, lo que significa que todos los miembros son visibles dentro del mismo paquete pero no son accesibles desde otros paquete:

package com.javamagician.modificadoresacceso;

public class SuperPublic {
    static void metodoPorDefecto() {
        // ...
    }
}

metodoPorDefecto() es accesible en otra clase del mismo paquete:

package com.javamagician.modificadoresacceso;

public class Public {
    public Public() {
        SuperPublic.metodoPorDefecto(); // Disponible en el mismo paquete.
    }
}

Sin embargo, no está disponible en otros paquetes.

3. public

Si agregamos la palabra clave public a una clase, método o propiedad, entonces la estamos poniendo a disposición de todo el mundo, es decir, todas las demás clases en todos los paquetes podrán usarla. Este es el modificador de acceso menos restrictivo:

package com.javamagician.modificadoresacceso;

public class SuperPublic {
    public static void metodoPublic() {
        // ...
    }
}

metodoPublic() está disponible en otro paquete:

package com.javamagician.modificadoresacceso.otro;

import com.javamagician.modificadoresacceso.SuperPublic;

public class OtroPublic {
    public OtroPublic() {
        SuperPublic.metodoPublic(); // Disponible en todas partes. Notemos que es un paquete diferente.
    }
}

Para obtener más detalles sobre cómo se comporta la palabra clave pública cuando se aplica a una clase, interfaz, clase pública o interfaz anidadas, y un método, consulta el artículo dedicado en próximas publicaciones.

4. private

Cualquier método, propiedad o constructor con la palabra clave private es accesible solo desde la misma clase. Este es el modificador de acceso más restrictivo y es fundamental para el concepto de encapsulación. Todos los datos estarán ocultos para el mundo exterior:

package com.javamagician.modificadoresacceso;

public class SuperPublic {
    static private void metodoPrivate() {
        // ...
    }

    private void otroMetodoPrivate() {
        metodoPrivate(); // Disponible solo en la misma clase.
    }
}

En próximas publicaciones más detalladas se mostrará cómo se comporta la palabra clave private cuando se aplica a un campo, constructor, método y a una clase interna.

5. protected

Entre los niveles de acceso public y private, está el modificador de acceso protected.

Si declaramos un método, propiedad o constructor con la palabra clave protected, podemos acceder al miembro desde el mismo paquete (como con el nivel de acceso por defecto) y además desde todas las subclases de su clase, incluso si se encuentran en otros paquetes:

package com.javamagician.modificadoresacceso;

public class SuperPublic {
    static protected void metodoProtected() {
        // ...
    }
}

metodoProtected() está disponible en las subclases (independientemente del paquete):

package com.javamagician.modificadoresacceso.otro;

import com.javamagician.modificadoresacceso.SuperPublic;

public class OtraSubClase extends SuperPublic {
    public OtraSubClase() {
        SuperPublic.metodoProtected(); // Disponible en la subclase. Notemos que es un paquete diferente.
    }
}

El artículo dedicado que veremos en próximas publicaciones describe más sobre la palabra clave cuando se usa en un campo, método, constructor, clase interna y la accesibilidad en el mismo paquete o en un paquete diferente.

6. Comparación

La tabla a continuación resume los modificadores de acceso disponibles. Podemos observar que una clase, independientemente de los modificadores de acceso utilizados, siempre tiene acceso a sus miembros:

Modificador Clase Paquete Subclase Mundo
public
protected No
por defecto No No
private No No No

7. Conclusión

En este breve artículo, repasamos los modificadores de acceso en Java.

Es una buena práctica utilizar el nivel de acceso más restrictivo posible para cualquier miembro dado para evitar un uso indebido. Siempre debemos usar el modificador de acceso private a menos que haya una buena razón para no hacerlo.

El nivel de acceso public solo debe utilizarse si un miembro forma parte de una API.