class Sphere { public float radius; public final int id; public Sphere( int givenId ) { // Przypisanie wartości polu finalnemu w klasie this.id = givenId;

Metody finalne Ponieważ w Javie wszystkie metody są domyślnie wirtualne, implementacja każdej z nich może zostać podana lub zmieniona w klasach pochodnych. W celu zablokowania takiej możliwości należy metodę zadeklarować jako finalną. Oznacza to, że nie może ona zostać zaimplementowana w klasie pochodnej a jej implementacja musi zostać podana w klasie w której została zadeklarowana. Decyzja o zadeklarowaniu metody jako finalnej może być podyktowana tym aby zapobiec niespodziewanemu zachowaniu się metody w podklasach zachowując w ten sposób spójność całej klasy.

Przykład: public class MyClass { public void myRegularMethod() { System.out.println("Jestem w myRegularMethod klasy MyClass");

public final void myFinalMethod() { System.out.println("Jestem w myFinalMethod klasy MyClass");

public class MySubClass extends MyClass { public void myRegularMethod() { System.out.println("Jestem w myRegularMethod klasy MySubClass");

// Niepoprawne - nie można zaimplementować metody finalnej w podklasie: // public final void myFinalMethod() { // System.out.println("Jestem w myFinalMethod klasy MySubClass"); // } }