Java final – zastosowania i przykłady
Ostatnia aktualizacja 3 kwietnia, 2024
Słowo kluczowe final odgrywa w języku Java istotną rolę. Pozwala ono na tworzenie zmiennych, które nie mogą zmienić swojej wartości, metod, których nie można przesłonić oraz klas, których nie można rozszerzać. W jaki sposób z tego korzystać?
Java final – zastosowanie w zmiennych
Słowo kluczowe final można użyć w deklaracji zmiennych, której wartości nie da się zmienić po przypisaniu. To znaczy, że zmienna staje się efektywnie stałą.
final int LIMIT = 5;
System.out.println(LIMIT);
W powyższym przykładzie zmienna LIMIT jest oznaczona jako final. Oznacza to, że nie można jej wartości zmienić po inicjalizacji. Próba przypisania nowej wartości do LIMIT spowodowałaby błąd kompilacji.
Java final w metodach
Kiedy final stosuje się do metody, oznacza to, że nie może być ona przesłonięta w klasach pochodnych.
class Base {
final void show() {
System.out.println("To jest metoda finalna.");
}
}
class Derived extends Base {
// Próba przesłonięcia metody show() spowodowałaby błąd kompilacji
}
W tym przykładzie metoda show() w klasie Base jest oznaczona jako final, co oznacza, że żadna klasa pochodna (np. Derived) nie może przesłonić tej metody.
Java final w klasach
Użycie final z klasą oznacza, że nie można jej rozszerzyć. Innymi słowy, nie możesz tworzyć klas potomnych od klasy oznaczonej jako final.
final class Immutable {
private int value;
Immutable(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
// Próba rozszerzenia klasy Immutable spowodowałaby błąd kompilacji
W przykładzie klasa Immutable jest oznaczona jako final, co uniemożliwia jej rozszerzanie. To sprawia, że jest dobrym kandydatem na klasę reprezentującą wartości niezmienne.
Skutki wykorzystania final w polimorfizmie
Słowo kluczowe final ma również wpływ na polimorfizm w Javie. Przez ograniczanie możliwości przesłaniania metod, final wprowadza pewność co do zachowania metody w hierarchii dziedziczenia.
class Animal {
final void eat() {
System.out.println("To zwierzę je.");
}
}
class Dog extends Animal {
// Próba dodania metody eat() tutaj zakończyłaby się niepowodzeniem
}
W tym przypadku metoda eat() w klasie Animal jest oznaczona jako final. Oznacza to, że klasa Dog nie może mieć własnej implementacji tej metody.
Dalsza część tekstu znajduje się pod materiałem wideo:
Kiedy wykorzystywać słowo kluczowe final w Javie?
- Deklaracja stałych. Użycie
final
przy zmiennych pozwala na tworzenie stałych, których wartości nie można zmieniać po ich zainicjowaniu. Zwiększa to czytelność kodu i zapobiega przypadkowym modyfikacjom. - Zapobieganie przesłanianiu metod. Oznaczenie metody jako
final
uniemożliwia jej przesłonięcie w klasach pochodnych. Jest to przydatne w przypadku, gdy chcemy zachować oryginalne zachowanie metody bez względu na dziedziczenie. - Zapobieganie dziedziczeniu klas. Kiedy klasa jest oznaczona jako
final
, nie można jej rozszerzyć. Jest to użyteczne dla klasy reprezentującej wartości niezmienne lub zapewniającej szczególne zachowanie, które nie powinno być modyfikowane. - Bezpieczeństwo wątków w kontekście obiektów niezmiennych. Zmienne oznaczone jako
final
w obiektach niezmiennych mogą być bezpiecznie dostępne przez wiele wątków bez konieczności synchronizacji, co sprawia, że są one przydatne w programowaniu wielowątkowym. - Optymalizacja wydajności. Kompilator i maszyna wirtualna Javy mogą wykorzystać informację o
final
do optymalizacji kodu, np. przez inline’owanie metod, co może przynieść korzyści wydajnościowe.
Dziękujemy, że przeczytałaś/eś nasz artykuł. Obserwuj EnterTheCode.pl w Wiadomościach Google, aby być na bieżąco.
Czytaj także: