Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

DUDAS SOBRE CONSTRUCTORES CON IDENTICO NOMBRE

Buenas noches:

Si tengo definida la siguiente clase de nombre "Carro" con dos constructores de identico nombre:

public class Carro {

    private int ano;

    private String modelo;

    private double precio;

    private static int busquedas = 0;

    public Carro(int ano, String modelo, double precio) {

        if (ano >= 1891) {

            this.ano = ano;

        } else {

            System.out.println("El año informado no es válido. " + "Por eso se utilizará el año 2017");

            this.ano = 2017;
        }

        if (modelo != null) {

            this.modelo = modelo;

        } else {

            System.out.println("El modelo no se informa. Por eso usaremos Gol!");

            this.modelo = "Gol";
        }

        if (precio > 0) {

            this.precio = precio;

        } else {

            System.out.println("El precio no es válido, por eso usaremos 40000,0");

            this.precio = 40000.0;
        }

        busquedas++;

    }

    // Aqui el nuevo constructor
    public Carro(String modelo, double precio) {

        this(2017, modelo, precio);

    }

    public int getAno() {
        return ano;
    }

    public String getModelo() {
        return modelo;
    }

    public double getPrecio() {
        return precio;
    }

    public static int getBusquedas() {
        return Carro.busquedas;
    }
}

Y luego construyo los objetos con el metodo main, de la siguiente manera:

public class CarroConstructor {

    public static void main(String[] args) {

        Carro carro1 = new Carro(2013, "GOL", 350000.00);

        Carro carro2 = new Carro(1700, "", 350000.00);

        Carro carro3 = new Carro(2018, "SIENA", 0);

        Carro otroCarro = new Carro("CIVIC", 95000.00);

        System.out.println(carro1.getAno());

        System.out.println(carro1.getModelo());

        System.out.println(carro1.getPrecio());

        System.out.println(carro1.getClass());

        System.out.println(carro2.getAno());

        System.out.println(carro2.getModelo());

        System.out.println(carro2.getPrecio());

        System.out.println(carro3.getAno());

        System.out.println(carro3.getModelo());

        System.out.println(carro3.getPrecio());

        System.out.println(otroCarro.getAno());

        System.out.println(otroCarro.getModelo());

        System.out.println(otroCarro.getPrecio());

        System.out.println(Carro.getBusquedas());
    }

}

Me pregunto: ¿Como reconoce Java cual es el constructor que tiene que utilizar? Ya que hay dos con el mismo nombre ("carro"). Aparentemente llama tres veces al primero y finalmente al segundo. Si bien cuando ejecuto el ultimo "new" el objeto que guardo en la variable "otroCarro" es el resultado de un "new Carro" que tiene dos argumentos y solo podria compilar si Java reconoce que debe utilizar el segundo constructor, el punto es que no se como lo hace. Tampoco estoy muy seguro de haber interpretado bien lo que hace el codigo.

Cualquier orientacion será bienvenida.

Gracias!

¡Saludos!

1 respuesta

Cómo lo hace internamente no sabría decirte, pero justamente es la diferente cantidad de parámetros (y tipos) los que diferencia un método de otro.