Easier to read with cream paper, a tint, more contrast or larger text? Choose your colours and text, once, for every page.

Vista previa

Atributos privados

Esta es la primera página de la lección. Léela y prueba las actividades. El resto está en el curso completo.

35 minutos

El volumen no puede ser 500

Subes el volumen de tu móvil. El móvil te deja llegar a 100 y ahí para.

Nadie puede ponerlo en 500 o en menos 20. Algo vigila el número antes de aceptarlo.

Hoy aprendes a poner ese vigilante en tus objetos.

Palabras clave

PalabraQué significaEjemplo
privateUn atributo privado solo se puede usar dentro de su propia clase.private int volume;
GetterUn método que devuelve el valor de un atributo privado. Empieza por get.getVolume()
SetterUn método que cambia un atributo privado. Empieza por set y puede comprobar el valor.setVolume(50)
EncapsularCerrar los datos de un objeto y dejar solo una puerta con vigilante.private y set
Valor válidoUn valor que tiene sentido para ese dato.volumen de 0 a 100

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

El problema: nadie vigila

Código: java
class Phone {
    int volume;
}

public class Main {
    public static void main(String[] args) {
        Phone phone = new Phone();
        phone.volume = 50;
        System.out.println("Volumen: " + phone.volume);

        // Nada impide un valor que no tiene sentido.
        phone.volume = 500;
        System.out.println("Volumen: " + phone.volume);
    }
}

Cerrar la puerta y poner un portero

Si el atributo es private, nadie de fuera lo toca. Ni para leer ni para cambiar.

Entonces escribimos dos métodos dentro de la clase. Uno lee: getVolume. Otro cambia: setVolume.

El método que cambia puede mirar el valor antes. Si no vale, lo rechaza.

Pruébalo: el volumen vigilado

Código: java
class Phone {
    private int volume;

    int getVolume() {
        return volume;
    }

    void setVolume(int volume) {
        if (volume >= 0 && volume <= 100) {
            this.volume = volume;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Phone phone = new Phone();
        phone.setVolume(50);
        phone.setVolume(500);
        System.out.println("Volumen: " + phone.getVolume());
        // Prueba phone.volume = 70; y lee el error.
    }
}

Ejemplo resuelto: qué guarda el móvil

LlamadaVolumen antesEs válidoVolumen después
setVolume(50)0Sí50
setVolume(500)50No50
setVolume(0)50Sí0
setVolume(-20)0No0
setVolume(100)0Sí100

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Repaso rápido

Inténtalo

Repaso rápido

3 preguntas
Pruébalo: tus respuestas se corrigen aquí y después se olvidan. Inicia sesión si quieres que se guarde tu puntuación y continuar donde lo dejaste.Iniciar sesión para guardar tu puntuación

Tus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.

Por qué merece la pena

Con private, la clase decide qué valores son posibles. Todo el programa depende de eso.

Si mañana el volumen llega a 200, cambias un solo método. No tienes que revisar cien líneas.

Los nombres siguen una costumbre: get más el nombre del dato, y set más el nombre del dato.

Pruébalo: un dato que solo se lee

Código: java
class Student {
    private String name;

    Student(String name) {
        this.name = name;
    }

    // Solo hay getter: el nombre no se cambia desde fuera.
    String getName() {
        return name;
    }
}

public class Main {
    public static void main(String[] args) {
        Student student = new Student("Marta");
        System.out.println("Hola, " + student.getName());
        // Quitar el setter también es una forma de proteger.
    }
}

La lección continúa

5 partes más de esta lección están en el curso completo, con los ejercicios y la comprobación final. Una cuenta te da todo.