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

Invocar um outro construtor utilizando "this"

Prezados, nesta aula foi utilizado o código abaixo como um exemplo de invocar um construtor a partir de outro construtor:

public Conta(int numero, double limite) {
    this(numero, limite, 0);
}

public Conta(int numero, double limite, double saldoInicial) {
    this.numero = numero;
    this.limite = limite;
    this.saldo = saldoInicial;
}

No entanto não peguei muito bem o conceito pois, se eu tivesse 3 ou 4 construtores neste mesmo código, qual deles o "this" invocaria?

Obrigado.

4 respostas

Fala aí Raphael, blz?

Para entender isso você precisa entender a sobrecarga de construtores.

Dentro de uma classe você pode ter mais de um construtor, desde que eles recebam argumentos diferentes. Ou seja, não posso ter dois construtores, que recebem a mesma quantidade de argumentos e os argumentos com o mesmo tipo.

Por exemplo:


MinhaClasse( String nome, String Sobrenome){
...
}


MinhaClasse(String endereco, String complemento){
...
}

Isso gera um erro de compilação.

Sabendo disso agora conseguimos responder a sua dúvida.

O this vai chamar o construtor com os mesmos tipos nos argumentos.

Espero ter ajudado.

Olá Fernando,

Entendi o ponto de sobrecarga de construtores mas apenas para exaurir a dúvida, no código abaixo tenho 3 construtores com quantidades diferentes de argumentos. Ao utilizar o "this" no primeiro construtor, qual outro construtor ele invocará? o 2? 3? ou vai depender de quantos parâmetros eu colocar no "this"?

class Conta {

   ....
  //contrutor 1 
   public Conta (int numero, double limite){
       this(? ? ?);
   }

   //contrutor 2
   public Conta (int numero, double limite, double saldo Inicial) {
       this.numero = numero;
       this.limite = limite;
       this.saldo = saldoInicial;
   }

   //construtor 3
   public Conta (int numero, double limite, double saldoInicial, boolean cartaoCredito) {
       this.numero = numero;
       this.limite = limite;
       this.saldo = saldoInicial;
       if(cartaoCredito == true) {
           this.cartaoCredito = "Sim";
       } this.cartaoCredito = "Nao";
   }
}
solução!

Olá Raphael!

Isso vai depender dos parâmetros que você vai passar para o construtor. Aproveitando o seu código, com algumas modificações, posso dar como exemplo uma classe com quatro construtores:

class Conta {

    int numero;
    double limite;
    double saldo;
    double saldoInicial;
    boolean cartaoCredito;


  //contrutor 1 
   public Conta (int numero, double limite){
       this(numero, limite, 0);
   }

   //contrutor 2
   public Conta (int numero, double limite, double saldoInicial) {
       this.numero = numero;
       this.limite = limite;
       this.saldo = saldoInicial;
   }

   //construtor 3
   public Conta (double limite, int numero, double saldoInicial) {
       this.numero = numero;
       this.limite = limite;
       this.saldo = saldoInicial;
   }

   //construtor 4
   public Conta (int numero, double limite, double saldoInicial, boolean cartaoCredito) {
       this.numero = numero;
       this.limite = limite;
       this.saldo = saldoInicial;
       this.cartaoCredito = cartaoCredito;
   }
}

Nesse exemplo o construtor chamado no this será o construtor 2. Observe que os construtores 2 e 3 recebem a mesma quantidade de parâmetros e os mesmos parâmetros, no entanto são diferentes pois os dois primeiros parâmetros são de tipos diferentes e estão em ordens invertidas em cada construtor.

Agora se modificarmos o construtor 1 da seguinte maneira:

//contrutor 1 
   public Conta (int numero, double limite){
       this(limite, numero, 0);
   }

o this passará a invocar o construtor 3.

Se voltarmos a modificar o construtor 1:

   public Conta (int numero, double limite){
       this(numero, limite, 0, false);
   }

veremos que o this passa a invocar o construtor 4.

Espero ter te ajudado.

Higor, perfeito! Agradeço pela sua atenção e a do Fernando, muito obrigado!