Java innere Klassen
In diesem Kapitel lernen wir Java innere Klassen kennen.
In Java kann eine Klasse eine andere Klasse verschachteln. Die Syntax lautet wie folgt:
class OuterClass { // 外部类
// ...
class NestedClass { // 嵌套类,或称为内部类
// ...
}
}
Um auf die innere Klasse zuzugreifen, können Sie ein Objekt der äußeren Klasse erstellen und dann ein Objekt der inneren Klasse erstellen.
Es gibt zwei Arten von verschachtelten Klassen:
- Nicht-statische innere Klasse
- Statische innere Klasse
Nicht-statische innere Klasse
Eine nicht-statische innere Klasse ist eine Klasse, die in einer anderen Klasse verschachtelt ist. Sie hat Zugriff auf die Mitglieder der äußeren Klasse und wird oft als innere Klasse bezeichnet.
Da die innere Klasse in der äußeren Klasse verschachtelt ist, müssen Sie zuerst die äußere Klasse instanziieren und dann ein Objekt der inneren Klasse erstellen.
Beispiel
int x = 10;
class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
Die Ausgabe des obigen Beispiels ist:
15
Private innere Klasse
Innere Klassen können mit private oder protected modifiziert werden. Wenn Sie nicht möchten, dass von außerhalb der äußeren Klasse auf die innere Klasse zugegriffen wird, können Sie den private-Modifikator verwenden:
Beispiel
int x = 10;
private class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
Im obigen Beispiel wird InnerClass als private innere Klasse festgelegt, und bei der Ausführung wird ein Fehler gemeldet:
MyMainClass.java:12: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
Statische innere Klasse
Statische innere Klassen können mit dem Schlüsselwort static definiert werden. Für statische innere Klassen müssen wir keine äußere Klasse erstellen, um auf sie zuzugreifen; wir können direkt auf sie zugreifen:
Beispiel
int x = 10;
static class InnerClass {
int y = 5;
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}
Die Ausgabe des obigen Beispiels ist:
5
Hinweis:Statische innere Klassen können nicht auf Mitglieder der äußeren Klasse zugreifen.
Zugriff auf Mitglieder der äußeren Klasse aus einer inneren Klasse
Eine fortgeschrittene Verwendung innerer Klassen besteht darin, dass sie auf die Eigenschaften und Methoden der äußeren Klasse zugreifen können:
Beispiel
int x = 10;
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
public class MyMainClass {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod());
}
}
Die Ausgabe des obigen Beispiels ist:
10Andere Erweiterungen
Java-Objekte und Klassen