Java Inner Classes sind Klassen, die innerhalb einer anderen Klasse definiert sind. Sie dienen dazu, Klassen, die nur an einer Stelle verwendet werden, logisch zu gruppieren, die Kapselung zu erhöhen und können zu lesbarerem und wartbarem Code führen. Innere Klassen können auf die Mitglieder (einschließlich privater Mitglieder) der äußeren Klasse zugreifen.
Arten von inneren Klassen
Nicht-statische verschachtelte Klasse (innere Klasse): Assoziiert mit einer Instanz der äußeren Klasse.
Statische verschachtelte Klasse: Nicht mit einer Instanz der äußeren Klasse verbunden und kann nur auf statische Mitglieder der äußeren Klasse zugreifen.
Lokale innere Klasse: Wird innerhalb eines Blocks definiert, normalerweise eine Methode.
Anonyme innere Klasse: Eine Klasse ohne Namen, die verwendet wird, um Objekte mit bestimmten Funktionen "on-the-fly" zu instanziieren.
Beispiele
Beispiel 1: Nicht-statische innere Klasse
publicclassOuterClass{privateString message ="Hello from Outer Class";classInnerClass{voiddisplay(){System.out.println(message);}}publicstaticvoidmain(String[] args){OuterClass outer =newOuterClass();OuterClass.InnerClass inner = outer.newInnerClass();
inner.display();}}Bereitgestellt von
In diesem Beispiel ist InnerClass eine nicht-statische innere Klasse. Sie kann auf das Feld message von OuterClass zugreifen. Eine Instanz von InnerClass wird mit einer Instanz von OuterClass erstellt.
Beispiel 2: Statische verschachtelte Klasse
publicclassOuterClass{privatestaticString message ="Hello from Static Nested Class";staticclassStaticNestedClass{voiddisplay(){System.out.println(message);}}publicstaticvoidmain(String[] args){OuterClass.StaticNestedClass nested =newOuterClass.StaticNestedClass();
nested.display();}}Bereitgestellt von
Hier ist StaticNestedClass eine statische verschachtelte Klasse. Sie kann direkt auf die statischen Mitglieder von OuterClass zugreifen. Es wird keine Instanz von OuterClass benötigt, um eine Instanz von StaticNestedClass zu erstellen.
Beispiel 3: Anonyme innere Klasse
publicclassOuterClass{publicstaticvoidmain(String[] args){Runnable runnable =newRunnable(){@Overridepublicvoidrun(){System.out.println("Running from Anonymous Inner Class");}};newThread(runnable).start();}}Bereitgestellt von
Dieses Beispiel demonstriert eine anonyme innere Klasse, die die Schnittstelle Runnable implementiert. Sie wird verwendet, um eine spezifische Implementierung der Methode run on the fly bereitzustellen.
Tipps und bewährte Praktiken
Sparsam verwenden: Innere Klassen können die Lesbarkeit des Codes erschweren, wenn sie zu oft verwendet werden. Verwende sie, wenn sie logischerweise zur äußeren Klasse gehören.
Anonyme Klassen: Ideal für die Implementierung von Schnittstellen oder abstrakten Klassen mit einer geringen Menge an Funktionalität.
Zugriff auf Mitglieder: Innere Klassen können auf alle Mitglieder der äußeren Klasse zugreifen, auch auf private Mitglieder, was sie für die Kapselung nützlich macht.
Statische verschachtelte Klassen: Wird verwendet, wenn die verschachtelte Klasse keinen Zugriff auf die Instanzmitglieder der äußeren Klasse benötigt.
Vermeide Komplexität: Halte die inneren Klassen einfach, um die Komplexität der äußeren Klasse nicht zu erhöhen.
Java Inner Classes sind Klassen, die innerhalb einer anderen Klasse definiert sind. Sie dienen dazu, Klassen, die nur an einer Stelle verwendet werden, logisch zu gruppieren, die Kapselung zu erhöhen und können zu lesbarerem und wartbarem Code führen. Innere Klassen können auf die Mitglieder (einschließlich privater Mitglieder) der äußeren Klasse zugreifen.
Arten von inneren Klassen
Beispiele
Beispiel 1: Nicht-statische innere Klasse
In diesem Beispiel ist
InnerClasseine nicht-statische innere Klasse. Sie kann auf das FeldmessagevonOuterClasszugreifen. Eine Instanz vonInnerClasswird mit einer Instanz vonOuterClasserstellt.Beispiel 2: Statische verschachtelte Klasse
Hier ist
StaticNestedClasseine statische verschachtelte Klasse. Sie kann direkt auf die statischen Mitglieder vonOuterClasszugreifen. Es wird keine Instanz vonOuterClassbenötigt, um eine Instanz vonStaticNestedClasszu erstellen.Beispiel 3: Anonyme innere Klasse
Dieses Beispiel demonstriert eine anonyme innere Klasse, die die Schnittstelle
Runnableimplementiert. Sie wird verwendet, um eine spezifische Implementierung der Methoderunon the fly bereitzustellen.Tipps und bewährte Praktiken