Adryr83:
Eu sei que para instanciar uma classe interna membro, você tem dois construtores diferentes:
Primeiro:
Outer out = new Outer();
Outer.Inner in = out.new Inner();
Segundo:
Outer.Inner in = new Outer().new Inner();
Agora, eu não sei por que isso compila o código:
public class Outer {
private String greeting="Hi";
protected class Inner {
public int repeat=3;
public void go() {
for (int i =0; i<repeat; i++) {
System.out.println(greeting);
}
}
}
public void callInner() {
Inner in = new Inner(); //in my opinion the correct constructor is Outer.Inner in = new Inner()
in.go();
}
public static void main(String[] args) {
Outer out = new Outer();
out.callInner();
}
}
Por que compilar?
Muito obrigado!
Eamon Scullion:
Como você está instanciar Inner
no âmbito da Outer
(dentro de um método de instância), você não precisa explicitamente instanciar referenciando os Outer
clas, como no seu exemplo:
Outer.Inner in = new Outer().new Inner();
É bom para instanciar apenas por referência Inner
:
Inner in = new Inner();
Isto aplica-se a todos os métodos de instância de uma classe, contanto que eles não são estáticos.