Modificadores de acceso (public, protected y private) JAVA

Al principio los modificadores de acceso pueden resultar un tanto inútiles puesto que, si puedes acceder directamente a un atributo, ¿para que vas a modificarlos mediante un método?, pues bien, como norma general los atributos de nuestras clases serán private o protected si utilizaremos herencia. Para modificar atributos o consultar su valor utilizaremos métodos, siendo esta la base de la encapsulación que consiste en hacer visible los atributos o métodos que sean realmente necesarios.


Para controlar el acceso a nuestros atributos y métodos se utilizan los modificadores de acceso que no son más que palabras reservadas del lenguaje que se encargarán de controlar desde dónde serán accesibles los miembros de una clase, estos modificadores son:
  • private (Acceso solo dentro de la clase)
  • protected (Acceso desde la clase y sus hijos "herencia")
  • Vacío (Sin escribir nada, denominado acceso de paquete)
  • public (Acceso publico desde cualquier lugar)
Estos modificadores de acceso se colocan justo delante del valor de retorno de un método, o del tipo de un atributo, así que de momento y hasta que no expliquemos el concepto de herencia, utilizaremos los más sencillos, private y public. A continuación podemos ver un ejemplo de su uso en una clase:
public class Vehiculo {
    //Atributos con acceso private
    private String modelo;
    private int velocidad;
    private boolean arrancado;
    //El constructor siempre debe de ser public
    public Vehiculo(String modelo, int velocidad, boolean arrancado) {
        this.modelo = modelo;
        this.velocidad = velocidad;
        this.arrancado = arrancado;
    }   
    //Atributos getter con acceso public
    public String getModelo() {
        return modelo;
    }

    public int getVelocidad() {
        return velocidad;
    }

    public boolean isArrancado() {
        return arrancado;
    }
}
Como vemos, hemos definido los atributos private, así nadie podrá modificarlos sin nuestro consentimiento, el constructor es public para permitir instancias de la clase desde fuera del archivo Vehiculo.java, y los métodos get serán también public, para permitir a cualquiera consultar el valor de nuestros atributos.

Con los modificadores de acceso, evitamos que nuestros programas tengan un uso no deseado, como modificar atributos introduciendo valores inválidos o llamando a métodos que pueden tener efectos no deseados.

El cuanto al modificador protected, este hace nuestro miembro (atributo o método) accesible desde la propia clase, y también desde las clases que hereden de esta o subclases.

Buenas prácticas
En generar se aconseja declarar todos los atributos como private, y cuando necesitemos consultar su valor o modificarlo, utilicemos los métodos get y set. Además en caso de que el tipo de valor devuelto por el método sea un boolean, se utilizará is en vez de get. A continuación podéis ver un ejemplo donde lo veréis todo más claro:
//Atributos private
private String nombre;
private boolean casado;

//Metodos get y set para estos atributos
public void setNombre(String nombre) {
    this.nombre = nombre;
}
public void setCasado(boolean casado) {
    this.casado = casado;
}
public String getNombre() {
    return nombre;
}
public boolean isCasado() {
    return casado;
}
Como vemos los metodos setCasado y setNombre se encargan de modificar los atributos y los métodos getNombre y isCasado nos permiten obtener sus valores.

Recuerda que cuando utilizamos "this.nombre" nos referimos al atributo nombre de la clase y con "nombre" nos referimos al parámetro con el mismo nombre.

Comentarios

  1. Graxie quede impactada xD

    ResponderEliminar
  2. Eres de lo mejor..
    Una gran ayuda.
    No te imaginas el bien que haces al publicar
    Conocimiento como este.
    Michaud gracias.

    ResponderEliminar
  3. Excelente post. Gracias!

    ResponderEliminar
  4. que porqueria ya que escribiste el tutorial porque no lo mostraste ejecutandose con valores en las variables. nombre que nombre pedro? casado si o no? un blog mas en la lista de ignorados.

    ResponderEliminar
    Respuestas
    1. Un imbécil mas, que solo sabe quejarse y criticar el trabajo de los demás. ¿PARA QUE CARAJOS QUIERES LOS VALORES? esos deben de ser iniciado en el momento que creas el objeto, iniciarlos en la clase no sirve masque para ocupar memoria.

      Eliminar
    2. HELLO THANK YOU

      Eliminar
  5. Gracias me salvaste la wea

    ResponderEliminar
    Respuestas
    1. Apenas lei wea, me fui a revisar el link de la pagina para cachar que era .cl, jajajajajaja

      Eliminar
  6. Una única duda:
    "En generar se aconseja declarar todos los atributos como private."
    Esto por qué es? Me imagino que por temas de seguridad, pero no se si estoy en lo cierto.

    ResponderEliminar
    Respuestas
    1. Depende mucho del caso que estés programando, normalmente se declaran private con funciones publicas getters que devuelven el valor para que la actualización de ese valor este mas controlada. Aunque como ya he dicho, hay casos en los que definirlos publicos tiene sentido por temas de usabilidad o rendimiento (acceder a variables o modificarlos directamente es mas rapido que hacerlo a traves de métodos)

      Eliminar
  7. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar

Publicar un comentario

Si tenéis alguna duda o sugerencia, no dudéis en comentar. ;)

Entradas populares de este blog

Autocompletado de codigo en Sublime Text

Compilar y ejecutar JAVA desde Notepad++

Ordenar cualquier array con SORT en JAVA