21.2. Nøgleordet final

Noget, der er erklæret final, kan ikke ændres. Både variabler, metoder og klasser kan erklæres final.

21.2.1. Variabler

En variabel, der er erklæret final, kan ikke ændres, når den først har fået en værdi.


public class X 
{
  public final int a=10;

  //..
  // forbudt: a=11;
}

Herover kan a's værdi ikke ændres i den efterfølgende kode.

Det kan lette overskueligheden at vide, hvilke variabler, der er konstante. Desuden udføres programmet lidt hurtigere.

final foran en objektvariabel angiver ikke synlighed, men kan bruges sammen med public, protected og private.

final kan også bruges på lokale variabler (hvor public, protected og private aldrig kan bruges):


  public static void main(String args[])
  {
    final Vector v = new Vector();

    //v = new Vector();  // ulovligt! v kan ikke ændres.

Bemærk: Når vi arbejder med objekter, er variablerne jo referencer til objekterne. En variabel erklæret final kan ikke ændres til at referere til et andet objekt, men objektet kan godt få ændret sin indre tilstand, f.eks. gennem et metodekald:


    v.addElement("Hans");  // lovligt, v refererer stadig til samme objekt

21.2.2. Metoder

En metode erklæret final kan ikke tilsidesættes i en nedarving.


public class X 
{
  public final void a()
  {
    // ..
  }
}

og


public class Y extends X 
{
  public void a() // ulovligt! a() er final
  {
    //..
  }
}

Den virtuelle maskine kan optimere final metoder, så kald til dem sker en smule hurtigere.

21.2.3. Klasser

En klasse erklæret final må man overhovedet ikke arve fra (og alle dens metoder bliver final).


public final class X 
{
  // ..
}

og


public class Y extends X  // ulovligt! X er final
{
}