`final` zmienna nie może być ponownie przypisana, `final` metoda nie może być nadpisana, a `final` klasa nie może być dziedziczona. (To nie czyni obiektu automatycznie niemutowalnym.)
`final` oznacza „nie można zmienić w tym wymiarze”, ale sens zależy od użycia.
Pola `final` mają specjalne gwarancje widoczności po konstrukcji (przy poprawnej publikacji obiektu). Dlatego obiekty niemutowalne z final fields są łatwiejsze w użyciu.
final List<String> xs = new ArrayList<>();
xs.add("a"); // ok (mutacja obiektu)
// xs = new ArrayList<>(); // nie ok (reassign)