Erstens gibt es vier Arten verschachtelter Klassen (innerhalb der Klasse definierte Klassen):
――Beide haben die folgenden Verwendungszwecke --Wenn Sie ein Objekt nur innerhalb der umschließenden Klasse verwenden [^ 1]
Wenn Sie die verschachtelte Klassenimplementierung in der übergeordneten Klasse ausblenden möchten --Um Namen der obersten Ebene zu speichern
Das Verhalten ändert sich geringfügig, je nachdem, ob statisch hinzugefügt wird oder nicht.
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
}
}
}
Es scheint, dass es im Grunde besser ist, mit statischen zu verwenden, weil nicht statische eine zusätzliche Abhängigkeit bringt.
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();
}
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