Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no uso do this() nos construtores - Java

Olá, estou com uma dúvida nos construtores, segue o código:

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 contrutor AQUI!
    public Carro(String modelo, double preco){
        this(2017, modelo, preco);
    }


    //getters e setters omitidos        

}

A minha dúvida é se eu posso ter mais que 2 construtores e, se caso eu tenha, como eu especifico a qual construtor o this() se refere.

3 respostas

E aí João, tudo bom??

Construtores


Então, você pode ter quantos construtores quiser e, forem possíveis. Isso é chamado de "Sobrecarga de métodos".

A Sobrecarga existe, no caso dos construtores, para criar já um objeto com os argumentos que você passou, sem precisar de setters e gettes.

Exemplo: acontece quando você tem um construtor por exemplo, nele você tem argumentos, diagamos 2, "modelo, preço". Eu posso criar carros da seguinte maneira:

Carro a = New Carro();
Carro b = New Carro("Sedan", 16000.00);
Carro c = New Carro(16000.00, "Sedan");

E assim por diante, apenas mudando a ordem dos argumentos sem repetição.

This


O "This" no Java é uma forma de referir-se a quem chama.

No código:

Carro a = New Carro();
Carro b = New Carro("Sedan", 16000.00);
Carro c = New Carro(16000.00, "Sedan");

Criamos 3 carros, com construtores diferentes. No caso, supondo que usamos "This" para os contrutores dos carros "b" e "c".

Quando fazemos:

this.preco = preco;

Significa que o preco que estamos passando o preço recebido "preco" para o preco do carro b "this.preco".

O "this" é uma forma de acessar os valores do objeto em questão, ou seja quem está ativando a chamada, o carro B quando chama, o "this" refere-se à ele, e o carro C quando chama também.

Ou seja, não é preciso especificar, apenas chamar o método que ele já se sabe qual que é qual ;)

Vlw, flw!

solução!

oi João!

você pode ter mais que 2 construtores sim, desde que eles tenham números de parâmetros diferentes ou tipos que sejam de tipos diferentes. Exemplo:

public class Carro {

    public Carro() {
        System.out.println("Construtor sem padrão");
    }

    public Carro(String modelo) {
        this.modelo = modelo;
    }

    public Carro(int ano) {
        this.ano = ano;
    }

    public Carro(String modelo, int ano) {
        this.modelo = modelo;
        this.ano = ano;
    }

    // restante do código
}

O que diferencia um construtor do outro é justamente a quantidade/tipo dos parâmetros.

Você pode usar o this() dentro de um construtor para se referir a outro construtor. Nesse caso como você não está passando nada para o this(), significa que a chamada seria para o construtor sem argumentos.

Imagina que o construtor que recebe o modelo está assim:

public Carro(String modelo) {
    this();
    this.modelo = modelo;
}

se em um método main você fizer:

Carro brasilia = new Carro("Brasilia");

Ele irá imprimir "Construtor sem padrão" no console.

Faz sentido? Abraço!

Ops, escrevi a resposta e quando submeti não vi que o Lucas já tinha respondido. :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software