Alguem sabe me dizer o porque esta dando StackOverflowError, nao estou estourando nada na pilha “eu acho”.
[code]package inner;
public class Teste {
public static void main(String[] args) {
A a = new A();
a.a.go(); // aqui da o Stack...
}
}
[/code]
[code]package inner;
public class A {
public void go(){
System.out.println("Class A Pai");
}
class TesteA{
public void go(){
System.out.println("Inner Class TesteA");
}
}
static class TesteBStatic{
public TesteBStatic() {
System.out.println("Construtor TesteB");
}
public void go(){
System.out.println("static class TesteB");
}
}
A a = new A(){
public void go(){
System.out.println("Anoninmous class a...");
}
};
}
[/code]
O problema é que você tem uma chamada recursiva do construtor default da classe A quando você cria a classe anônima. Você definiu em A uma variável do tipo A. Isso é perfeitamente possível. Porém quando você inicializa essa variável com uma subclasse anônima de A você cria a recursão, porque o novo objeto também tem um campo A inicializado com uma subclasse, e por aí vai.
Olá!
acho que assim fica mais fácil visualizar:
[code]
package stackTest;
public class Teste {
public static void main(String[] args) {
A a = new A();
}
}
class A {
A a;
A() {
a = new A();
}
}[/code]
Abs.
[quote=gervas-IO]Olá!
acho que assim fica mais fácil visualizar:
[code]
package stackTest;
public class Teste {
public static void main(String[] args) {
A a = new A();
}
}
class A {
A a;
A() {
a = new A();
}
}[/code]
Abs.[/quote]
Quando a chamada é explícita ela nem compila.
Hum cara é verdade!! Toda vez que eu criar uma classe anônima então e de dentro dessa popria classe eu der um new ClasseQueTemUmaClasseAnonima() vai gerar recursão num vai n?