2012-03-21 1 views
5

Я использую плагин eclipse checkstyle. У меня есть несколько методов в классе А, которые переопределены в классе B. У меня есть следующие предупреждения для большинства методовПочему CheckStyle предлагает использовать последний метод?

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

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

EDIT

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

+1

окончательный метод нельзя переоценить! – Rakesh

+1

Мне любопытно узнать, как плагин может знать, что этот метод был задуман как. – EJP

ответ

12

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

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

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

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

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

                      «Дизайн и документов для наследования или Else Запрещать это»

Итак, если ваше намерение не позволяет подклассам переопределять метод (и, возможно, изменить поведение o f суперкласс (все методы: virtual в Java)), затем сделайте метод окончательным.

0

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

Конечного ключевым слово модификатор означает, что конечный класс не может быть продлен, переменная не может быть изменен, а также способ может 'переопределить.

4

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

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

0

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