2012-03-21 16 views
5

Używam wtyczki eclipse checkstyle. Mam kilka metod w klasie A, które zostały nadpisane w klasie B. Mam następujące ostrzeżenie dla większości metodDlaczego CheckStyle sugeruje, że używam ostatecznej metody?

Funkcja SearchAndReplace nie jest pomyślany być dziedziczone
- należy stwierdzić, streszczenie lub końcowy lub zostaw to puste.

Czy istnieją jakiekolwiek korzyści z deklarowania metody jako ostatecznej?

EDIT

wiem co ostateczne słowo kluczowe jest za. Wiem, że to zapobiega przesłonięciu metod, czy istnieją inne zalety, takie jak wydajność czy coś w tym stylu?

+1

Ostatnia metoda nie może zostać zmieniona! – Rakesh

+1

Jestem ciekawy, jak wtyczka może wiedzieć, w jaki sposób została pomyślana metoda. – EJP

Odpowiedz

12

Kiedy deklarujesz metodę jako ostateczną, mówisz, że metoda może nie zostać nadpisana.

Cytat z języka Java Specification:

Metoda może być uznana za końcowy, aby zapobiec podklasy z nadrzędnymi lub ukrywanie go.

Jest to błąd podczas kompilacji, aby próbować przesłonić lub ukryć ostateczną metodę.

Wspólne hasło (ze względu na Joshua Bloch wierzę) to

                      "Projektowanie i dokumentów dla dziedziczenia albo zakazać jej"

Tak więc, jeśli twoim zamiarem jest, aby subklasy zastąpiły metodę (i potencjalnie zmienić zachowanie o f super-klasa (wszystkie metody są virtual w Javie)), a następnie uczynić metodę ostateczną.

0

W Java końcowe parametr jest stosowany w różnych okoliczności:

Ostateczny parametr jest modyfikator oznacza końcowy klasa nie może być przedłużony, zmienna nie może być modyfikowana, jak również sposób może będzie nadpisywać.

4

Metoda final gwarantuje, że żadna z podklas nie zastąpi tej metody. Istnieje szansa, że ​​środowisko wykonawcze może to wykorzystać dla zwiększenia wydajności (która może być niewielka).

Głównym powodem wykonania metody final jest zatrzymanie dziedziczenia przesłaniającego metodę. Może to być ważna kwestia (na przykład wyobraźmy sobie metodę o nazwie bool checkSecurity() - pozwolenie innym na obejście tego byłoby złe!)

0

Gdy metoda jest zadeklarowana jako ostateczna, można ją wywołać w konstruktorze (chyba, że ​​inne metody nie są ostateczne przywoływany w nim). Jeśli nie jest to końcowe podobieństwo, może je przesłonić w sposób, który próbuje uzyskać dostęp do pól wprowadzonych do podklasy. I często nie będzie to, czego oczekujesz. Wydaje mi się, że przy pisaniu na urządzenia mobilne są pewne zalety związane z wydajnością, ale nie jestem ekspertem.

Powiązane problemy