In questo articolo parleremo delle funzioni dichiarate come final.
Il vantaggio di dichiarare una funzione final è che non sarà possibile ridefinire quella funzione se viene ereditata. Proprio

per questo motivo non è possibile definire una funzione sia come final che come abstract.
Ecco un esempio che dimostra quanto detto:

class ExampleFinal {
   public static void main(String args[]) {
      //altro codice...
   }
   final void stamp(String a) {
      System.out.println(a);
   }
}

class ExampleDerived extends ExampleFinal {
//   void stamp(String a) {
//      provare a togliere il commento e a compilare. Si riceverà un errore di compilazione.
//   }
}

Come si è visto, se una funzione è dichiarata come final, qualunque classe erediti quella funzione non può comunque

ridefinirla.

Questo può essere utile quando si deve essere sicuri che una funzione faccia sempre la stessa cosa.