Reasignar valores a los objetos de Java

Reasignar valores a los objetos de Java

Seguimos avanzando en el curso. Esta vez, vamos a continuar con el código del capítulo anterior.

En este capítulo te voy a mostrar como reasignar valores a los atributos de los objetos Java.

class Usuario {
    //Atributos
    String nombre = "Silvia";
    String apellidos =  "Blanes Alarcón";
    int edad = 27;
    String direccion = "Enrique Granados, 7";
    String telefono = "+34-91-000-000";
}

public class Main {
    public static void main(String[] args) {
        //Instancias de la clase Usuario
        Usuario usuario1 = new Usuario();
        Usuario usuario2 = new Usuario();

        //Se imprimen valores de los objetos
        System.out.println(usuario1.nombre);
        System.out.println(usuario2.nombre);
    }
}

Resultado en la consola

Silvia
Silvia

Hasta el momento, tenemos el problema de que la clase, ya lleva los valores escritos en ella. Esto significa, que cada usuario nuevo que creemos, tendrá los mismos valores.

Reasignar valores a atributos de un objeto en Java

La solución está en reasignar valores a los atributos de cada objeto. Hagámoslo con el objeto usuario2. Voy a cambiar solo los valores de tres de sus atributos.

Para reasignar valores a los atributos de un objeto, tienes que llamar al propio objeto, poner un punto y el nombre del atributo. De esta forma, puedes asignar un nuevo valor, como si fuera una variable normal y corriente.

        usuario2.nombre = "Roberto";
        usuario2.apellidos = "Nieto Santamaría";
        usuario2.direccion = "C/Del abeto nº63 4º-3ª";

Esta reasignación no afecta a la clase ni a los otros objetos, solo al objeto usuario2.

Voy a imprimir todos los valores de los dos objetos y así ves como han quedado todos después de este cambio.

class Usuario {
    //Atributos
    String nombre = "Silvia";
    String apellidos =  "Blanes Alarcón";
    int edad = 27;
    String direccion = "Enrique Granados, 7";
    String telefono = "+34-91-000-000";
}

public class Main {
    public static void main(String[] args) {
        //Instancias de la clase Usuario
        Usuario usuario1 = new Usuario();
        Usuario usuario2 = new Usuario();

        //Reasignación de nuevos valores a usuario2
        usuario2.nombre = "Roberto";
        usuario2.apellidos = "Nieto Santamaría";
        usuario2.direccion = "C/Del abeto nº63 4º-3ª";

        //Valores del objeto usuario1
        System.out.println("-->Atributos del objeto usuario1");
        System.out.println(usuario1.nombre);
        System.out.println(usuario1.apellidos);
        System.out.println(usuario1.edad);
        System.out.println(usuario1.direccion);
        System.out.println(usuario1.telefono);

        //Valores del objeto usuario2
        System.out.println("-->Atributos del objeto usuario2");
        System.out.println(usuario2.nombre);
        System.out.println(usuario2.apellidos);
        System.out.println(usuario2.edad);
        System.out.println(usuario2.direccion);
        System.out.println(usuario2.telefono);
    }
}

Resultado en la consola

-->Atributos del objeto usuario1
Silvia
Blanes Alarcón
27
Enrique Granados, 7
+34-91-000-000
-->Atributos del objeto usuario2
Roberto
Nieto Santamaría
27
C/Del abeto nº63 4º-3ª
+34-91-000-000

Como puedes ver, se han cambiado los valores de los tres atributos del objeto usuario2, el resto, sigue igual.

Tener los atributos inicializados en la clase, a veces, está bien. Sin embargo, en casos como el que estamos escribiendo, no es muy práctico. Te voy a dar un ejemplo.

En esta clase, para describir autos, ¿cuáles de estos atributos consideras que podrían tener siempre el mismo valor?

class Auto {
    String marca;
    String modelo;
    byte numeroRuedas;
    String color;
    String year;
}

Pues bien, supongamos que la empresa que vende estos autos, siempre vende de la misma marca.

En ese caso, este atributo, puede quedar ya escrito en la clase.

El modelo, no, ya que seguramente, se vendan autos de diferentes modelos.

El número de ruedas, puede ser 4 siempre.

El color no tiene sentido ponerlo con un valor y el año de fabricación tampoco.

Entonces, la clase podría quedar así:

class Auto {
    String marca = "Ford";
    String modelo;
    byte numeroRuedas = 4;
    String color;
    String year;
}

Pues ahora, a partir de esto, vamos a crear dos objetos y le vamos a asignar valores solo a lo que no está ya asignado en la clase.

class Auto {
    String marca = "Ford";
    String modelo;
    byte numeroRuedas = 4;
    String color;
    String year;
}

public class Main {
    public static void main(String[] args) {
        //Instancias de la clase Auto
        Auto auto1 = new Auto();
        Auto auto2 = new Auto();

        //Asignación de valores al objeto auto1
        auto1.modelo = "Mustang";
        auto1.color = "rojo";
        auto1.year = "1968";

        //Asignación de valores al objeto auto2
        auto2.modelo = "Focus";
        auto2.color = "plateado";
        auto2.year = "2021";

        //Imprime los datos del objeto auto1
        System.out.println("-->Atributos del objeto auto1");
        System.out.println(auto1.marca);
        System.out.println(auto1.modelo);
        System.out.println(auto1.numeroRuedas);
        System.out.println(auto1.color);
        System.out.println(auto1.year);

        //Imprime los datos del objeto auto2
        System.out.println("-->Atributos del objeto auto2");
        System.out.println(auto2.marca);
        System.out.println(auto2.modelo);
        System.out.println(auto2.numeroRuedas);
        System.out.println(auto2.color);
        System.out.println(auto2.year);
    }
}

Resultado en la consola

-->Atributos del objeto auto1
Ford
Mustang
4
rojo
1968
-->Atributos del objeto auto2
Ford
Focus
4
plateado
2021

Los valores que siempre son los mismos, como "numeroRuedas", no los he tenido que especificar en cada objeto, ya que los llevan todos por defecto.

El resto de valores distintos, los he asignado y ahora, cada objeto, tiene sus propias características.

Si miramos el código al querer consultar los datos de los dos objetos, nos queda código muy repetitivo ¿Te imaginas si hacemos esto con 1000 objetos?

La solución a esto, es crear lo que se conoce como método en la clase. Este método llevará los println() necesarios para que con cualquier objeto creado con la clase, podamos hacer una llamada e imprimirlos.

No te preocupes si no te imaginas la utilidad de esto o si no lo entiendes. Lo explicaré parte por parte en el siguiente capítulo.

Todo el temario del curso Java aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior Aprende a manejar fechas y horas en Python: guía completa para principiantes
curso de Python Entrada siguiente Copias de seguridad MySQL con hora y fecha automática con Python