7 Äußere.innere Klassen
»Der Nutzen ist ein Teil der Schönheit.«
– Albrecht Dürer (1471–1528)
7.1 Geschachtelte (innere) Klassen, Schnittstellen, Aufzählungen
Bisher haben wir Klassen, Schnittstellen und Aufzählungen kennengelernt, die entweder allein in der Datei oder zusammen mit anderen Typen in einer Datei, also einer Compilationseinheit, deklariert wurden. Es gibt darüber hinaus die Möglichkeit, eine Klasse, Aufzählung oder Schnittstelle in andere Typdeklarationen hineinzunehmen. Das ist sinnvoll, denn die Motivation dahinter ist, noch mehr Details zu verstecken, denn es gibt sehr lokale Typdeklarationen, die keine größere Sichtbarkeit brauchen.
Für eine Klasse In, die in eine Klasse Out gesetzt wird, sieht das im Quellcode so aus:
class Out {
class In {
}
}
Eine geschachtelte Klasse, die so eingebunden wird, heißt innere Klasse. Im Folgenden wollen wir nicht mehr ständig betonen, dass auch Schnittstellen als Typen eingebettet werden können, und bleiben bei der einfachen Sprachregelung innere Klassen. (Aufzählungen werden vom Compiler in Klassen übersetzt und müssen daher nicht unbedingt gesondert behandelt werden. Natürlich lassen sich auch Aufzählungen innerhalb von Klassen oder Schnittstellen deklarieren.)
Die Java-Spezifikation beschreibt vier Typen von inneren Klassen, die im Folgenden vorgestellt werden. Egal, wie sie deklariert werden, es ist eine enge Kopplung der Typen, und der Name des inneren Typs muss sich vom Namen des äußeren Typs unterscheiden.
Typ | Beispiel |
statische innere Klasse |
class Out { |
Mitgliedsklasse |
class Out { |
lokale Klasse |
class Out { |
anonyme innere Klasse |
class Out { |
Hinweis |
Das Gegenteil von geschachtelten Klassen, also das, womit wir uns bisher die ganze Zeit beschäftigt haben, heißt Top-Level-Klasse. Die Laufzeitumgebung kennt nur Top-Level-Klassen, und geschachtelte innere Klassen werden letztendlich zu ganz »normalen« Klassendeklarationen. |
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.