Почему CheckStyle предлагает мне использовать последний метод? - PullRequest
5 голосов
/ 21 марта 2012

Я использую плагин Eclipse Checkstyle.У меня есть несколько методов в классе A, которые переопределяются в классе B. У меня есть следующее предупреждение для большинства методов

Функция SearchAndReplace не предназначена для наследования- он должен быть объявлен абстрактным или окончательным или оставить его пустым.

Есть ли какие-либо преимущества в объявлении метода как окончательного?

РЕДАКТИРОВАТЬ

Я знаю, для чего используется ключевое слово final.Я знаю, что это предотвращает переопределение методов, есть ли другие преимущества, такие как производительность или что-то в этом роде?

Ответы [ 4 ]

12 голосов
/ 21 марта 2012

Когда вы объявляете метод финальным, вы говорите, что метод не может быть переопределен.

Цитата из спецификации языка Java:

Метод может быть объявлен как final, чтобы подклассы не могли его переопределить или скрыть.

Ошибка времени компиляции при попытке переопределить или скрыть последний метод.

Общий лозунг (из-за Джошуа Блоха, я верю):

" Дизайн и документ для наследования или иначе Запретить его "

Таким образом, если вы не намерены позволить подклассам переопределять метод (и потенциально изменить поведение суперкласса (все методы виртуальные в Java)), тогда сделайте метод финальным.

4 голосов
/ 21 марта 2012

Метод final гарантирует, что никакие подклассы не будут переопределять метод. Скорее всего, среда выполнения может воспользоваться этим для повышения производительности (которое может быть незначительным).

Основная причина создания метода final состоит в том, чтобы прекратить наследование, переопределяющее метод. Это может быть важным соображением (например, представьте метод с именем bool checkSecurity() - позволить другим переопределить это было бы плохо!)

0 голосов
/ 21 марта 2012

Когда метод объявлен как final, его можно безопасно вызывать в конструкторе (если в нем не вызваны другие не финальные методы). Если он не является окончательным, подклассы могут переопределить его способом, который пытается получить доступ к полям, введенным в подкласс. И это часто будет не то, что вы ожидаете. я думаю, что когда ты пишешь для мобильных устройств, есть некоторое преимущество в производительности, но я там не эксперт.

0 голосов
/ 21 марта 2012

В Java последнее ключевое слово применяется в различных контекстах:

Ключевое слово final является модификатором, означающим, что последний класс нельзя расширить, переменную нельзя изменить, а также метод нельзя переопределить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...