Zum Hauptinhalt springen

Innere Klassen (Inner Classes)

Java erlaubt es, Klassen und Schnittstellen zu verschachteln. Ziel innerer Klassen ist es, Hilfsklassen möglichst nah an der Stelle zu definieren, wo sie benötigt werden — z.B. Ausnahmeklassen, Komparatoren oder Ereignisbehandler. Alle bisher bekannten Klassen, die auf der obersten Ebene definiert sind, nennt man auch äußere Klassen oder Top-Level-Klassen.

Geschachtelte Klassen (Nested Classes)

Geschachtelte Klassen sind statische Top-Level-Klassen, die innerhalb einer anderen Top-Level-Klasse zur Strukturierung des Namensraums definiert werden. Da sie statisch sein müssen, sind sie im eigentlichen Sinne keine echten inneren Klassen.

Computer.java (Auszug)
public abstract class Computer {
...
public static final class Notebook extends Computer implements Comparable<Notebook> {...}

public static final class Cpu {...}
...
}

Elementklassen (Member Classes)

Objekte von Elementklassen sind immer an ein Objekt der umgebenden Klasse gebunden. Das ermöglicht die Umsetzung von Kompositionen (siehe Darstellung von Assoziationen). Elementklassen haben Zugriff auf alle Variablen und Methoden der umgebenden Klasse, dürfen aber keine statischen Elemente enthalten.

List.java (Auszug)
public class List {
...
public class Item {...}
...
}

Lokale Klassen

Lokale Klassen werden innerhalb einer Methode definiert und sind auch nur dort verwendbar. Sie dürfen nicht als public, protected, private oder static deklariert werden, dürfen keine statischen Elemente enthalten und können nur auf final-markierte Variablen und Parameter der umgebenden Methode zugreifen.

Translator.java
public interface Translator {

String translate(String s);

}

Anonyme Klassen

Anonyme Klassen haben im Gegensatz zu lokalen Klassen keinen Namen. Sie werden direkt innerhalb eines Ausdrucks definiert und instanziiert — Klassendeklaration und Objekterzeugung sind also in einem Konstrukt vereint. Ist der erwartete Datentyp eine Schnittstelle, implementiert die anonyme Klasse diese; ist es eine Klasse, wird daraus abgeleitet.

Translator.java
public interface Translator {

String translate(String s);

}