Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
5
respuestas

Finalidad de definir el constructor.

No es más sencillo inicializar directamente la variable así...

private int agencia = 1;

Se hace un poco revoltoso este tema en particular, les agradecería que me apoyen a entender un poco mejor. Gracias de antemano.

5 respuestas

Pienso igual, si me gustaria saber si realmente tiene otro proposito, porque es mas sencillo simplemente inicializarlo.

Buenas! Espero que esten bien. Yo creo que realizar un constructor tiene ventajas por encima de solo inicializar la variable. Por ejemplo al iniciar la variable ponemos el valor por defecto, pero al realizar un constructor darle una condición a esa variable, ejemplo saldo u agencia no pueden ser cero ni negativo, y la luego asignar un valor por defecto. La desventaja de iniciar la variable es que le damos una valor por defecto ( ej: 1) pero el usuario le puede poner cualquier otro valor ( ej: -24). Lo que para unas variables es inconveniente, todos depende de para que van a usar esa variables.

En el método setAgencia se está condicionando para que el valor no pueda ser negativo e inicializando la variable ya te asegura que no sea 0, sin embargo y según lo entiendo al declarar el constructor te haces responsable del otras funciones que ya estaban definidas por default, y a mi en lo personal se me hace mucho más rebuscado recordar que tengo que pasar la agencia cómo parámetro al crear la cuenta, me haría más sentido si al crear cuenta te pidiera específicamente pasar "x" parámetro, que en este caso sería la "agencia", pero hasta este punto, si simplemente creas una cuenta y no pasaste ningún parámetro y no sabes o no recuerdas que este parámetros debe ser agencia, simplemente no podrás avanzar, y lo que me gustaría terminar de entender es en que otro punto esto podría ser la opción más adecuada.... no se si explico bien mi inquietud, ojalá que a alguien me pudiera proporcionar algunos escenarios

Hola muchachos. Verán, los constructores tienen por finalidad dar soporte en la construcción o instanciación de objetos. Vamos a verlo con ejemplos para dar más claridad al respecto.

Tenemos una clase pojo (bean o entidad) llamada Animal, definida de la siguiente manera:

public class Animal{

    // campos encapsulados, protegidos con el modificador de acceso "private" para evitar mal uso de los atributos
    private String nombre;
    private int edad;

    // Constructor vacío que nos permite crear objetos vacíos.
    public Animal(){

    }

    // 2do Constructor, con parámetro nombre
    public Animal(String nombre){
        this.nombre = nombre;
    }

    // 3er Constructor, con ambos parámetros
    public Animal(String nombre, int edad){
        this.nombre = nombre;
        this.edad = edad;
    }

    // Métodos Getter y Setter para acceder a nuestros atributos protegidos (encapsulados)
    public void setNombre(String nombre){
        this.nombre = nombre;
    }

    public String getNombre(){
        return this.nombre;
    }

    public void setEdad(int edad){
        this.edad = edad;
    }

    public int getEdad(){
        return this.edad;
    }
}

Ok, ahora que tenemos nuestra clase definida, con 3 constructores diferentes, vamos a verlas en aplicación. Por ejemplo, digamos que en otra clase queremos crear un objeto de tipo Animal. Primero lo haremos usando el constructor vacío:

// objeto perro de tipo animal
Animal perro = new Animal();

// Como se utilizó el constructor vacío, nuestro objeto perro está vacío, no tiene ni nombre ni edad, así que tenemos que establecerlos manualmente:
perro.setNombre("Goofy");
perro.setEdad(5);

// Ahora sí, nuestro perro está creado con sus respectivos datos.

Ahora veamos una instancia de la clase Animal, a través del segundo constructor:

// Objeto gato de tipo Animal, que lleva el nombre como parámetro porque estamos usando el segundo constructor
Animal gato = new Gato("Garfield");

// Ahora si necesitamos establecer la edad de garfield, tendríamoss que hacerlo manualmente:
gato.setEdad(3);

Finalmente veamos cómo se instancia a través del 3er constructor:

// Objeto pajarito de tipo Animal que usa el tercer constructor:
Animal pajarito = new Animal("Piolin", 10);

Y esa es la diferencia, estimados. Ahora bien, los constructores nos ayudan a agregar lógica extra al momento de construir nuestros objetos. Vamos a modificar nuestro tercer constructor de la clase Animal:

public Animal(String nombre, int edad){
    this.nombre = nombre;
    this.edad = edad + 10;

    System.out.printlf("La edad de %s ha sufrido un cambio, se le han sumado 10 años, ahora son %i años", this.nombre, this.edad);
}

Entonces al momento de crear nuestro objeto a través del tercer constructor, ahora aparecerá un nuevo mensaje indicando que "La edad de piolin ha sufrido un cambio, se le han sumado 10 años, ahora son 20 años".

Espero ahora haya quedado más claro, y sino, avisen para explicarlo de otra manera :)

Gracias Jorge ! ahora si me quedo mucho mas claro !