Forma de llamar a la clase interna por clase externa

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 Inneren el ámbito de Outer(dentro de un método de instancia), que no es necesario hacer referencia explícita a una instancia de la Outerclas, 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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=221891&siteId=1
Recomendado
Clasificación