Definition
Geschachtelte Klassen
Geschachtelte Klassen sind Klassen, die innerhalb einer anderen Klasse deklariert werden [1].
Einfaches Beispiel

Beispiel für geschachtelte Klassen
Dieses Bild zeigt die Klasse Demo_Geschachtelt, die im Innern des Klassenrumpfs eine Klasse Punkt enthält. Damit der Demo-Quelltext nicht zu lang wird, wurden die Instanzvariablen x und y von Punkt als public deklariert, so dass ohne Getter-Methoden darauf zugegriffen werden kann.
In der Methode gleich() der Außenklasse (Zeile 20-23) werden nun zwei Objekte der Klasse Punkt miteinander verglichen. Wenn p1 und p2 die gleichen Koordinaten haben, wird true zurückgegeben, andernfalls false.
In der Methode testen() wird diese Methode überprüft. Beim Vergleich der Punkte a und b wird auf der Konsole false angezeigt, beim Vergleich der Punkte a und c dagegen true.
Gültigkeitsbereiche
Die innere Klasse - hier Punkt - kann auf alle Elemente (Instanzvariablen, Methoden) der äußeren Klasse unbeschränkt zugreifen, selbst dann, wenn diese als private deklariert worden sind.
Die äußere Klasse - hier Demo_Geschachtelt - erhält vollen Zugriff auf die Elemente der inneren Klasse. Wenn wir also in Zeile 6 des obigen Quelltextes das Schlüsselwort public durch private ersetzen, kann die äußere Klasse trotzdem auf die Instanzvariablen x und y der inneren Klasse zugreifen.
Sichtbarkeit der inneren Klasse
Mit einem kleinen Experiment wollen wir nun einmal herausfinden, ob die innere Klasse für andere Klassen sichtbar ist. Dazu schreiben wir eine kleine Testklasse für unser Projekt.

Ergebnis eines kleinen Experiments
Unser kleines Experiment hat uns gezeigt, dass andere Klassen nicht auf die innere Klasse zugreifen können, wohl wir die innere Klasse als public deklariert haben.

Ergebnis eines weiteren Experiments
Eine Deklaration eines Objektes der inneren Klasse ist in der Testklasse aber möglich, wenn man den Namen der äußeren Klasse vor den Namen der inneren Klasse setzt:
Demo_Geschachtelt.Punkt punkt;
läuft fehlerfrei ab.
Der Versuch der Initialisierung in Zeile 7 des Testprogramms ist jedoch nicht von Erfolg gekrönt. "Eine einschließende Instanz mit Demo_Geschachtelt.Punkt" ist erforderlich.

Ergebnis eines weiteren Experiments
Dieses Verfahren funktioniert jetzt. Man muss zuerst ein Objekt der äußeren Klasse - hier demo - anlegen. Dann kann man über die äußere Klasse ein Objekt der inneren Klasse in der Testklasse erzeugen.
Quellen:
- Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.