Middle
Was sind die Unterschiede zwischen verschachtelten (nested) und inneren (inner) Klassen in Java?
sobes.tech KI
Antwort von AI
-
Verschachtelte Klassen (Nested classes): Statische Mitglieder der äußeren Klasse. Haben keinen direkten Zugriff auf nicht-statische Mitglieder (Felder und Methoden) der äußeren Klasse, nur über eine Instanz der äußeren Klasse. Werden mit dem Schlüsselwort
staticdeklariert. -
Innere Klassen (Inner classes): Nicht-statische Mitglieder der äußeren Klasse. Haben vollen Zugriff auf alle Mitglieder (statische und nicht-statische) der äußeren Klasse, einschließlich privater. Für die Erstellung einer Instanz einer inneren Klasse ist eine Instanz der äußeren Klasse erforderlich. Verwenden kein
static-Schlüsselwort.
Beispiel:
// Äußere Klasse
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statische verschachtelte Klasse
static class StaticNestedClass {
void display() {
// Zugriff nur auf statische Mitglieder der äußeren Klasse
System.out.println("Statische verschachtelte Klasse: " + staticOuterField);
// Kein direkter Zugriff auf outerField
// System.out.println(outerField); // Kompilierungsfehler
}
}
// Nicht-statische innere Klasse
class InnerClass {
void display() {
// Zugriff auf alle Mitglieder der äußeren Klasse
System.out.println("Innere Klasse: " + outerField);
System.out.println("Innere Klasse (statisch): " + staticOuterField);
}
}
}
// Verwendung
public class Main {
public static void main(String[] args) {
// Erstellen einer Instanz der statischen verschachtelten Klasse
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Erstellen einer Instanz der inneren Klasse erfordert eine Instanz der äußeren Klasse
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Merkmal | Verschachtelte Klasse (Nested Class) | Innere Klasse (Inner Class) |
|---|---|---|
| Schlüsselwort | static |
Nein |
| Zugriff auf Mitglieder der äußeren Klasse | Nur statische | Alle |
| Erfordert eine Instanz der äußeren Klasse zur Erstellung | Nein | Ja |
| Verbindung zur Instanz der äußeren Klasse | Nein | Ja |