Modificadores de Acceso (Access Modifiers)

Los modificadores de acceso determinan el nivel de visibilidad para una entidad Java, ya sea clases, atributos o métodos.

Java soporta 4 tipos de modificadores de acceso:

  • Public
  • Private
  • Protected
  • Default

Modificador de acceso público (Public)

El modificador de acceso public es el más abierto de todos. Si una clase o sus miembros son declarados como public, ellos pueden ser accesados por cualquier otra clase sin importar los límites del package que lo contiene. Es importante aclarar que un metodo publico solo es accesible fuera del package si la clase a la que pertenece también lo es.

public class Persona {
    public String nombre;
    public String getNombre() {
        return nombre;
    }
}

Modificador de acceso privado (Private)

Este es el más restrictivo de todos. Un miembro privado de una clase sólo es accesible dentro de la misma, es decir solo los miembros dentro de la misma clase pueden acceder a estos.

public class Persona {
    private String nombre;
    private String getNombre() {
        return nombre;
    }
}

Modificadores de acceso protegido y por defecto (Protected and Default)

Los modificadores de acceso protected y default son bastantes similares. Si un miembro es declarado como protected o default, entonces este es visible para cualquier clase dentro del mismo paquete. Nótese que no existe una palabra reservada (keyword) para especificar el modificador default, de hecho este es asignado cuando ningún otro modificador es empleado. Es importante mencionar que este modificador es también conocido como package o package-protected. Entonces ¿Cual es la diferencia entre protected y default?, la diferencia radica en que los miembros protected son también accesibles para las subclases que deriven de la clase que los contiene sin importar las limitantes de los paquetes mientras que los miembros default no.

//Ejemplo protected
public class Persona {
    protected String nombre;
    protected String getNombre() {
        return nombre;
    }
}

//Ejemplo default
class Persona {
    String nombre;
    String getNombre() {
        return nombre;
    }
}

Modificadores de acceso y sus niveles de visibilidad

Modificadores de accesoDentro de la misma claseSubclase dentro del paqueteSubclase fuera del paqueteOtras clases dentro del paqueteOtras clases fuera del paquete
publicSiSiSiSiSi
privateSiNoNoNoNo
protectedSiSiSiSiNo
defaultSiSiNoSiNo
« »