[JAVA] Interner Klassentyp: Mit oder ohne Statik

Erstens gibt es vier Arten verschachtelter Klassen (innerhalb der Klasse definierte Klassen):

Informationen zu statisch verschachtelten Klassen und nicht statisch verschachtelten Klassen

――Beide haben die folgenden Verwendungszwecke --Wenn Sie ein Objekt nur innerhalb der umschließenden Klasse verwenden [^ 1]

MyObject.java


public class OuterObject{
    String outer = "";

    static void method() {
        InnerStaticObject innerStaticObject = new InnerStaticObject();
        InnerObject innerObject = new InnerObject(); //Kompilierungsfehler
    }

    /**statisch verschachtelte Klasse**/
    private static class InnerStaticObject {
        void method() {
            System.out.println(outer); //Kompilierungsfehler
            System.out.println(OuterObject.this.outer); //Kompilierungsfehler
        }
    }

    /**Nicht statische verschachtelte Klasse**/
    private class InnerObject {
        void method() {
            System.out.println(outer); //Kann referenziert werden
            System.out.println(OuterObject.this.outer); //Kann referenziert werden
        }
    }
}

statisch verschachtelte Klasse

Nicht statische verschachtelte Klasse

Es scheint, dass es im Grunde besser ist, mit statischen zu verwenden, weil nicht statische eine zusätzliche Abhängigkeit bringt.

Lokale innere Klasse

In Methoden, Konstruktoren, Initialisierungsblöcken, if-Klauseln und anderen Blöcken definierte Klassen

――Es hat die folgenden Verwendungszwecke

MyObject.java


class MyObject {
    private void method() {
        //Lokale innere Klasse
        class LocalInnerClass implements MyInterface {
            @Override
            public void print() {
                System.out.println("Local Inner Class");
            }
        }
        LocalInnerClass localInnerClass = new LocalInnerClass ();
        localInnerClass.print();
    }
}

interface MyInterface {
    void print();
}

Anonyme Klasse

Eine Klasse ohne Klassennamen

――Es hat die folgenden Verwendungszwecke

MyObject.java


class MyObject {
    private void method() {
        //Anonyme Klasse
        MyInterface myInterface = new MyInterface() {
            @Override
            public void print() {
                System.out.println("Anonymous Class");
            }
        };
        myInterface.print();
    }
}

interface MyInterface {
    void print();
}

[^ 1]: Umschließende Klasse: Die Klasse außerhalb der inneren Klasse

Recommended Posts

Interner Klassentyp: Mit oder ohne Statik
Verarbeitungsgeschwindigkeit mit und ohne statische Aufladung
Konzept der Instanz ・ Klassentypvariable ・ Konstruktor ・ Statisches Element
[Rails] ActiveModel :: Serializers mit oder ohne explizite Verschachtelung
Java getClass () ist nicht kompatibel mit Generika (oder Typvariablen).
Feld für den Java-Klassentyp
Suchen Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java