Home > Informatik > Begriffe und Konzepte > Geschachtelte Klassen

Geschachtelte Klassen

Definition

Geschachtelte Klassen

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

Einfaches Beispiel
Beschreibung siehe folgenden Text

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.

Beschreibung siehe folgenden Text

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.

Beschreibung siehe folgenden Text

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.

Beschreibung siehe folgenden Text

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:

  1. Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.