3
respostas

Chamada de dois sobrescrita em um construtor

Tem como chamar dois super (ou this) no construtor?

Exemplo:

class Conta
{
    String tipoConta, agencia, conta;
    Conta(String tipoConta)
    {
        this.tipoConta=tipoConta;
    }
    Conta(String agencia, String conta)
    {
        this.agencia=agencia;
        this.conta=conta;
    }
}

class ContaCorrente extends Conta
{
    static contadorContaCorrente;
    ContaCorrente()
    {
        super("conta corrente");
        ++contadorContaCorrente;
    }
    ContaCorrente(String agencia, String conta)
    {
        this();    //primeira chamada
        super(agencia, conta); //segunda chamada
    }
}

Isso é apenas um exemplo pois o modelo exato que eu fiz está em outro arquivo. Porém tem alguma maneira de eu fazer isso?

Por enquanto fiz manual:

 ContaCorrente(String agencia, String conta)
{
    super(agencia, conta);
    super.tipoConta="conta corrente";
    ++contadorContaCorrente;
}
3 respostas

Marcelo, tudo bem? Não sei se entendi bem sua dúvida, mas me parece que quando você cria o objeto cc dessa forma:

ContaCorrente cc = new ContaCorrente("agencia1", "numero1")

Internamente a classe ContaCorrente vai chamar a segunda sobrecarga que já define o tipo da conta:

ContaCorrente(String agencia, String conta) {
    this();  
    super(agencia, conta);
}

O this() vai chamar o construtor padrão que já define o tipo de conta e incrementa o contador de contas.

Não está funcionando assim?

Exatamente assim que eu fiz e esperasse que funcinasse, mas infelizmente não funcionada, da o erro:

"Constructor call must be the first statement in a constructor"

Portanto se eu faço

{
    this();
    super(); // -> da erro aqui
}
{
    super();
    this(); // -> da erro aqui
}

Estou usando o eclipse, e ele me obriga a ambos os comandos serem o primeiro ( o que para mim não da certo, pois quero chamar o construtor da classe mãe e o próprio construtor).

Hm, é um conflito de construtores então Marcelo, acho que não podemos fazer isso mesmo. Aliás, eu não consigo pensar em por que você chamaria o construtor vazio dentro do próprio construtor, sendo que nos dois você chama o super...