1
resposta

Duvida sobre segundo construtor

Havia dois construtores e eles tinham seus if e else em cada atributo, menos o segundo em ano porque 2017 é estático, até ai ok!

public class Carro{
    private int ano;
    private String modelo;
    private double preco;

    public Carro(int ano, String modelo, double preco){
        if(ano >= 1891){
            this.ano = ano;
        }else{
            System.out.println("O ano informado está inválido. Por isso usaremos 2017!");
            this.ano = 2017;
        }

        if( modelo != null){
            this.modelo = modelo;
        }else{
            System.out.println("O modelo não foi informado. Por isso usaremos Gol!");
            this.modelo = "Gol";
        }

        if(preco > 0){
            this.preco = preco;
        }else{
            System.out.println("O preço não é válido. Por isso usaremos 40000.0!");
            this.preco = 40000.0;
        }        
    }

    //Novo construtor AQUI!
    public Carro(String modelo, double preco){
        this(2017, modelo, preco);
    }

    //getters e setters omitidos        

}

Então agora foi colocado os atributos do segundo construtor em uma linha só. Eu só não entendi como as necessidades dos atributos ( modelo não ser nulo e preço não ser menor que zero) feitos com os ifs, foram mantidos no segundo construtor ou não foram mantidos? Ou então ele estaria dentro do primeiro construtor? mas ainda sim eu não entendi muito bem.

1 resposta

Olá Nikolle, tudo bem?

Eu também estou aprendendo ainda, e também fiquei com um pouco de dúvida, mas quem sabe consigo ajudar um pouco e aproveito apra acompanhar outras respostas rs

Pelo que entendi, a palavra "this", dentro do segundo construtor, faz referência ao primeiro construtor (neste caso em que há só dois).

Então o segundo construtor "repassa" a inicialização dos atributos que ele recebeu, mas, neste caso, para todo carro o ano será 2017.

Acho que a dúvida pode ser "como ele sabe que é para invocar aquele construtor". E eu acredito que, neste caso, é uma característica da sintaxe da linguagem Java mesmo.

Talvez se houvesse outros construtores, teríamos que escrever "this" e ele saberia qual utilizar pelo número de atributos (e os tipos) que fossem informados.

Vamos esperar alguém mais experiente responder hehehe