Adryr83:
Yo sé que a instancias de un miembro de la clase interna, tiene dos constructores diferentes:
Primero:
Outer out = new Outer();
Outer.Inner in = out.new Inner();
Segundo:
Outer.Inner in = new Outer().new Inner();
Ahora, no sé por qué este código se compila:
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 qué se compila?
¡Muchas gracias!
Eamon Scullion:
Como es de crear instancias Inner
en el ámbito de Outer
(dentro de un método de instancia), que no es necesario hacer referencia explícita a una instancia de la Outer
clas, como en el ejemplo:
Outer.Inner in = new Outer().new Inner();
Está bien para crear una instancia con sólo referencias Inner
:
Inner in = new Inner();
Esto se aplica a todos los métodos de instancia dentro de una clase, siempre y cuando no son estáticas.