Middle
Welche Arten von verschachtelten Klassen gibt es?
sobes.tech KI
Antwort von AI
Statische verschachtelte Klassen und innere Klassen (nicht-statische verschachtelte Klassen).
-
Statische verschachtelte Klassen:
- Werden mit dem Schlüsselwort
staticdeklariert. - Haben nur Zugriff auf statische Mitglieder (Felder und Methoden) der äußeren Klasse, einschließlich privater.
- Haben keinen direkten Zugriff auf nicht-statische Mitglieder der äußeren Klasse.
- Können ohne Instanz der äußeren Klasse instanziiert werden.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Statische Variable: " + staticVar); // System.out.println("Instanzvariable: " + instanceVar); // Kompilierungsfehler } } } - Werden mit dem Schlüsselwort
-
Innere Klassen (nicht-statische verschachtelte Klassen):
- Werden ohne das Schlüsselwort
staticdeklariert. - Haben vollen Zugriff auf alle Mitglieder (statische und nicht-statische) der äußeren Klasse, einschließlich privater.
- Können keine statischen Mitglieder (Felder oder Methoden) enthalten, außer finalen Konstanten.
- Erfordern eine Instanz der äußeren Klasse für ihre Erstellung.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Statische Variable: " + staticVar); System.out.println("Instanzvariable: " + instanceVar); } } } - Werden ohne das Schlüsselwort
-
Lokale Klassen:
- Werden innerhalb von Methoden, Konstruktoren oder Initialisierungsblöcken deklariert.
- Haben Zugriff auf alle finalen und effektiv finalen lokalen Variablen sowie auf die Mitglieder der äußeren Klasse, in der sie definiert sind.
- Ihr Sichtbarkeitsbereich ist auf den Block beschränkt, in dem sie deklariert sind.
class Outer { void myMethod() { final int localVar = 5; // Effektiv final class LocalInner { void display() { System.out.println("Lokale Variable: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Anonyme Klassen:
- Lokale Klassen ohne Namen.
- Werden gleichzeitig erstellt und instanziiert.
- Werden häufig verwendet, um Implementierungen von Schnittstellen zu erstellen oder Klassen zu erweitern.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Anonyme Aktion."); } }; anon.doSomething(); } }
Hauptunterschiede zwischen statischen verschachtelten Klassen und inneren Klassen:
| Eigenschaft | Statische verschachtelte Klasse | Innere Klasse |
|---|---|---|
| Schlüsselwort | static |
Nicht vorhanden |
| Zugriff auf Mitglieder | Nur auf statische Mitglieder der | Alle Mitglieder der äußeren Klasse |
| äußeren Klasse | ||
| Instanziierung | Ohne Instanz der äußeren Klasse | Erfordert eine Instanz der äußeren Klasse |
| Statische Mitglieder | Können enthalten | Können keine enthalten (außer Konstanten) |