Vorlesung Informatik 2 - Teil A: Java Kurs

4.2 Innere Klassen

Man kann auch innerhalb eine Klasse verschachtelte Klassen und Interfaces definieren:

public class Aussen{
     private int groesse; 
     public class Innen{
           private void methode(){
                  int x = groesse+1;
          }
    }
   private interface InnenInterface{
          ...
   }
}

Ein Objekt einer inneren Klasse existiert nur innerhalb eines Objekts der äußeren Klasse. Deshalb kann eine innere Klassen auf Methoden und Variablen der äußeren Klasse zugreifen (im Beispiel verwendet 'methode' die Eigenschaft 'groesse').

Sollen Objekte der inneren Klasse unabhängig von der äußeren Klasse existieren können muss die innere Klasse statisch definiert sein:

public class Aussen{
     private static int groesse; 
     public class Innen{
         private void tuWas(){
           // diese Methode kann NICHT auf groesse zugreifen!
         }
    }
}

Innerer Klassen sind oft Hilfsklassen der äußeren Klasse, dann sollte man sie private deklarieren, das machen wir bei Datenstrukturen wie z.B. Stack, Queue oder Bäumen.

Der Zugriff auf eine innere Klasse geschieht mit Aussen.Innen.

Die Klassen Double und Float der geometrischen Klassen wie z.B. Rectangle2D.Double sind öffentliche innere Klassen der jeweiligen Klasse. 

Innere Klassen können abstrakt sein, ihre Sichtbarkeit kann beliebig definiert werden (public protected, private oder friendly).

Lehrvideo  (YouTube)