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?
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?
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..