Una consulta sobre la anidación de clases en java

mr_azad:
public class Outer{
    public class Inner{
    }
}

public class Main {
    public static void main(String[] args) {
        Outer objOut = new Outer();
        //Outer.Inner object1= objOut.new Inner();  // runes without a problem
        //objOut.Inner object2= objOut.new Inner(); //gives error
    }
}

Esto puede sonar poco aficionado, pero, ¿Cuáles son las diferencias entre Outer.Innervs objOut.Inner.

TJ Crowder:

No puede utilizar un nombre de variable como el tipo de otra variable, que es lo que estamos tratando de hacer con el objOut.Inner. El tipo de la variable es Inner(o opcionalmente Outer.Inner).

Debido a que Inneres una clase interna , que está asociado con una instancia de su clase externa (su ejemplo de cerramiento ). Cuando se crea una instancia del mismo, puede optionally¹ especificar qué instancia del objeto que está asociado con, que es lo que está haciendo con objOut.new Inner.

Este ejemplo puede ayudar a que sea un poco más claro:

public class Example {
    private String str;

    public class Inner {
        void show() {
            // Show the string for the Example this Inner is part of
            System.out.println(Example.this.str);
        }
    }

    public Example(String s) {
        this.str = s;
    }

    public static void main(String[] args) {
        Example e1 = new Example("e1");
        Example e2 = new Example("e2");
        Inner i1 = e1.new Inner();
        i1.show(); // "e1"
        Inner i2 = e2.new Inner();
        i2.show(); // "e2"
    } 
}

Copiar en directo

Observe cómo el i1 Innerejemplo pone e1como su envolvente Exampleejemplo, y así ve e1's str, pero i2se pone e2como ejemplo que encierra por lo que ve e2' s str.

Sugiero este tutorial de Java para obtener más información.


¹ A veces no es opcional, como en mi Exampleclase por encima, desde donde new Innerse usa, no hay ninguna instancia predeterminada que podría utilizar. Sería opcional en una instancia método de Example, pero no en ese staticmétodo.

Supongo que te gusta

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