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"); // } }