Slovicko final oznacuje v Jave vsetko, co je konecne
definovane, co nie je mozne zmenit. Pouziva sa v troch pripadoch.
final class,
final metoda,
final datovy clen.
final class ...
Ak pri definicii triedy uvedieme final, potom povazujeme tuto
triedu za konecnu tzn., ze nie je mozne odvodit potomka od takejto triedy.
Pri pokuse o to nas zastavi uz 'kompilator'.
Definovat nejaku triedu ako final ma vyznam:
- z bezpecnostnych dovodov; Jednym zo sposobov narusenia systemu
je odvodit novu triedu, prepisat jej metody a potom ju nahradit starou.
Z tohoto dovodu su niektore triedy v 'classes.zip' definovane ako
final, napr. trieda java.lang.String.
- z dovodu dizajnu; mozeme si mysliet, ze nasa trieda je uz tak
perfektna, ze uz nebudeme potrebovat od nej odvodit ziadnu triedu.
Priklad
final class Najlepsia {
// telo triedy
}
final metoda
Rezervovane slovicko final je mozne pouzit aj v pripade metod
triedy. Takuto metodu nie je mozne prepisat v jej
potomkovi, povazuje sa za konecnu.
Priklad>
class NovaTrieda {
// ...
final void Print();
// ...
}
final datovy clen
Napriek tomu, ze som to uz spomenul v kapitole O premennych
rozhodol som sa zopakovat to opet.
Ak je lubovolny datovy clen definovany ako final,
potom nie je mozne menit jeho obsah - je to konstanta.
Priklad
class MenoTriedy {
...
final int a = 3204; // 'a' je konstanta
...
}