Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

This construtor

B() { new C(this);}

Nesse caso o this está chamando o construtor vazio da classe C? Nesse exemplo porquê o compilador não identificou o loop em tempo de compilação?

2 respostas
solução

Oi Manoel!

Neste caso, os construtores da classe B não estão chamando um ao outro. Vamos dar uma identada no código pra ver:

class B { 
    B(A a) {
        new C(); 
    } 

    B() { 
        new C(this);
    }
 }

Neste caso, os dois construtores estão criando um objeto de outro classe (C), por isso não temos um problema aqui na classe B. O compilador acaba não conseguindo pegar neste caso.

O erro em execução ocorre por conta do que C faz em seu construtor, que leva a uma recursão...


Nesta linha:

B() { new C(this);}

Estamos chamando este construtor da classe C:

C(B b) {new B(new A());}

Quando passamos o this dentro da classe B, estamos passando a referencia do próprio objeto atual. Por isso cai no construtor de C que recebe um B como parâmetro.

Faz sentido? Abraço!

Top cara..