EMZETT.
Login

Inner Classes (Innere Klassen)

Kurz: Eine Klasse, die innerhalb einer anderen Klasse definiert ist — nützlich, wenn eine Hilfsklasse konzeptionell eng mit ihrer umgebenden Klasse verbunden ist und außerhalb davon keinen eigenständigen Sinn ergibt.

Genauer: Innere Klassen können (je nach Sprache) Zugriff auf die privaten Felder ihrer umgebenden Klasse haben, was sie von völlig unabhängigen Klassen unterscheidet. Eine Sonderform ist die anonyme Klasse — eine innere Klasse ohne eigenen Namen, die direkt an der Stelle definiert wird, an der sie einmalig gebraucht wird.

Im Detail

Der Hauptgrund, eine innere statt einer separaten, eigenständigen Klasse zu verwenden, ist logische Gruppierung: Wenn eine Hilfsklasse nur im Kontext ihrer äußeren Klasse überhaupt Sinn ergibt (z. B. ein Node innerhalb einer selbstgebauten LinkedList), macht die Verschachtelung diese Beziehung im Code sofort sichtbar, statt sie nur in der Dokumentation zu erwähnen.

class LinkedList {
    class Node {       // ergibt nur innerhalb von LinkedList Sinn
        wert
        naechster
    }
    kopf: Node
}

Man unterscheidet grob zwei Varianten:

  • Nicht-statische innere Klasse: braucht eine Instanz der äußeren Klasse, um überhaupt erzeugt zu werden, und hat automatisch Zugriff auf deren Felder — eng gekoppelt an ein konkretes äußeres Objekt.
  • Statische innere Klasse (in Sprachen, die das unterscheiden, z. B. Java): verhält sich fast wie eine normale, eigenständige Klasse, ist aber trotzdem im Namensraum der äußeren Klasse organisiert — braucht KEINE Instanz der äußeren Klasse und hat keinen automatischen Zugriff auf deren nicht-statische Felder.

Der Vorteil gegenüber einer komplett separaten Datei/Klasse ist gekapselte, aufgeräumte Struktur — man findet zusammengehörigen Code an einer Stelle statt über mehrere Dateien verstreut. Der Nachteil: Wird die innere Klasse doch mal an anderer Stelle wiederverwendet, ist die enge Kopplung an ihre äußere Klasse oft im Weg, und ein Refactoring zu einer eigenständigen Klasse wird nötig.

Siehe auch: Classes, Anonymous Classes