Podczas przesłonięcia metody innej niż wirtualna w Javie zalecane jest użycie adnotacji @Override, ale co się stanie, jeśli zaimplementuję metodę abstrakcyjną? Czy powinienem także użyć funkcji @Override?Java: Czy powinienem dodać adnotację @Override podczas implementowania metod abstrakcyjnych?
Odpowiedz
W tym przypadku preferuję użycie @Override
, aby metoda została oznaczona w podklasach, jeśli nadklasa się zmieni (całkowite usunięcie metody lub zmiana jej sygnatury itp.).
Jedyną różnicą jest to, że bez adnotacji, jeśli metoda w superklasie/interfejsie zostanie zmieniona lub usunięta, rozpatrywana implementacja staje się po prostu "normalną" metodą tej klasy. W związku z tym powinieneś dodać adnotację, jeśli wdrażasz metodę wyłącznie w celu wypełnienia umowy; i prawdopodobnie nie powinieneś go dodawać, jeśli metoda ma sens w twojej klasie, niezależnie od implementowanych interfejsów lub dziedziczonych metod abstrakcyjnych.
Tak. Zalecana praktyka Joshua Blocha w Effective Java.
Tak - ponownie, mówi kompilatorowi: "Naprawdę chcę zastąpić metodę tutaj.Jeśli tam nie jest odpowiednią metodą do nadpisania, popełniłem błąd i chcę być o tym poinformowany ! "
Osobiście uważam, że szkoda, że jest to tylko adnotacja, a nie część języka (jak to jest w języku C#), ale oczywiście jest to korzyść po fakcie.
+1 dla "testu regresji" – guerda
To uratowało moją skórę kilka razy. –
Właściwie Joshua Bloch, w ostatnim akapicie stronie 178 w Effective Java (2nd ed.), mówi, że nie jest istotne dla metod konkretnych klas, które zastępują metody abstrakcyjne używać Override
adnotacji ponieważ kompilator mimo to daj błąd. Jednak "nie jest to szkodliwe".
Zalecam wybór strategii i konsekwentne jej przestrzeganie.
Kompilator i tak dałby błąd? Masz na myśli, że jeśli konkretna klasa implementuje metodę, która nie jest abstrakcyjną metodą superklasy, kompilator narzekałby na nią? To nie może być to, co masz na myśli, ale nie mogę zrozumieć, co masz na myśli. – LarsH
@LarsH On oznacza, że kompilator da błąd, jeśli konkretna klasa nie implementuje abstrakcyjnej metody w superklasie, co miałoby miejsce, gdybyś pomylił nazwę abstrakcyjnej metody, którą podklasa musi zaimplementować. –
@espertus: Dzięki za wyjaśnienia. Nie dostaniesz więc błędu ani ostrzeżenia, jeśli, jak powiedział Andrzej, metoda w superklasie/interfejsie zostanie zmieniona lub usunięta. – LarsH
- 1. @Override nie jest dozwolone podczas implementowania metody interfejsu
- 2. Użyj metod abstrakcyjnych zamiast pól
- 3. wykorzystanie do @Override Java
- 4. Podczas implementowania flag wiersza poleceń powinienem poprzedzić fowardslash (/) lub łącznik (-)?
- 5. Różnica pomiędzy wirtualnymi i abstrakcyjnych metod
- 6. Zastępowanie cech i metod abstrakcyjnych w Scali
- 7. Dlaczego błąd javac na adnotacji @Override
- 8. Sprężyna 3.2 AOP - Przechwytywanie metod przez adnotację
- 9. Java override Object equals() metoda
- 10. Java - do czego służy "@Override"?
- 11. Jak w razie potrzeby dodać metody @Override, @Deprecate i statyczne do metod automatycznie dla wszystkich klas Java w projekcie?
- 12. testowanie jednostkowe klas abstrakcyjnych i chronionych metod wewnątrz nich
- 13. Dynamicznie dodać adnotację do istniejącej klasy
- 14. Czy zawsze powinienem używać statycznych metod fabrycznych zamiast konstruktorów?
- 15. Czy powinienem martwić się kodowaniem podczas serializacji?
- 16. Czy powinienem dodać .idea/workspace.xml do gitignore?
- 17. Android - jak dodać adnotację @hide w moim projekcie
- 18. PHPStorm: Automatycznie generuj dokumentację inheritdoc podczas implementowania metod abstrakcyjnej klasy nadrzędnej
- 19. Wiele pochodnych klas abstrakcyjnych?
- 20. TypeScript definiuje własność prywatną podczas implementowania interfejsu
- 21. Czy mogę utworzyć adnotację Java, która "rozszerza" @SuppressWarnings?
- 22. Jak zwrócić konkretny typ podczas implementowania interfejsu ogólnego?
- 23. Java: Zmienne końcowe w klasach abstrakcyjnych
- 24. Wymuszanie implementacji zdarzeń w pochodnych klasach abstrakcyjnych
- 25. Java: Czy powinienem używać float lub Float?
- 26. Udostępnianie wspólnej ścieżki nadrzędnej podczas implementowania kontrolerów sprężyn
- 27. jak uzyskać adnotację parametru w java?
- 28. Jak uzyskać adnotację zajęć w języku Java?
- 29. Jak utworzyć adnotację niestandardową w języku Java?
- 30. dodaj adnotację do pdf
Potrzebujesz również Java 6, aby wykorzystać tę adnotację. Java 5 nie pozwala umieścić go w implementacjach interfejsu. – akarnokd