22.2. Lokale klasser

En lokal klasse er defineret i en blok programkode ligesom en lokal variabel.

public class YdreKlasse
{

  public void metode()
  {
    // ...

    class LokalKlasse
    {
      // metoder og variabler her ...
    }
    
    LokalKlasse objektAfLokalKlasse = new LokalKlasse();

    // ...

  }
}

Lokale klasser er kun synlige og anvendelige i den blok, hvor de er defineret. Ligesom lokale variabler er de ikke synlige uden for metoden (og nøgleordene public, private, protected og static foran klassen har derfor ingen mening).

Lokale klasser kan benytte alle variabler og metoder, der er synlige inden for blokken. Dog skal lokale variabler i den omgivende metode være erklæret final, dvs. være konstante, før de kan bruges i den lokale klasse.

Lokale klasser bruges ret sjældent (men de er gode at forstå, før man går videre til anonyme klasser)

Nedenstående er et eksempel på en lokal klasse, der benytter variabler defineret i den ydre klasse:

public class YdreKlasseMedLokalKlasse
{
  private int a1 = 1;          // Objektvariabler behøver ikke være final

  public void prøvLokaltObjekt(final int a2) // Bemærk: final
  {
    final int a3 = 3;                        // Bemærk: final

    class LokalKlasse {                      // definér lokal klasse
      int a4 = 4;
      public void udskriv()
      {
        System.out.println( a4 );
        System.out.println( a3 );
        System.out.println( a2 );
        System.out.println( a1 );
      }
    } // slut på lokal klasse

    LokalKlasse lokal = new LokalKlasse(); // opret lokalt objekt fra klassen
    lokal.udskriv();
  }

  public static void main(String args[]){
    YdreKlasseMedLokalKlasse ydre = new YdreKlasseMedLokalKlasse();
    ydre.prøvLokaltObjekt(2);
  }
}

Resultatet bliver:

4
3
2
1