Можно ли использовать ключевое слово final для метода?
Основы Java о ключевом слове final
Ответы (8)
Абсолютно! Ключевое слово final
можно применять практически к чему угодно, в каждом случае означая «вы больше не можете это изменить».
Вот что это значит применительно к...
переменная: вы просто не можете присвоить переменной новое значение (конечно, сделав ее константой)
метод: вы не можете повторно реализовать (т. е. переопределить) этот метод в подклассе.
класс: вы не можете определить подкласс
В каждом случае мы просто указываем: как только эта вещь будет объявлена, это будет последнее значение (или реализация), которое вы когда-либо увидите для нее.
final
? Если да, то это выходит за рамки первоначального вопроса. Тем не менее, вы можете комментировать конструктивно любым способом, который, по вашему мнению, улучшит существующие ответы. Однако, поскольку этому ответу уже несколько лет, и на сегодняшний день он был просмотрен всего 528 раз, я рекомендую сосредоточить ваши усилия на более актуальных вопросах.
- person VoteyDisciple; 06.07.2012
Да, можно объявить метод как final
. Это будет означать, что метод не может быть переопределен его подклассами.
Из Спецификации языка Java, третье издание, Раздел 8.4.3.3:
Метод может быть объявлен окончательным, чтобы подклассы не могли его переопределить или скрыть. Попытка переопределить или скрыть окончательный метод является ошибкой времени компиляции.
Для получения дополнительной информации см. Написание конечных классов и методов. страница из Учебники по Java содержит дополнительную информацию.
Да.
Вы можете сделать метод final
public class A {
public static final void f() {
System.out.println("test");
}
}
Обычно есть две причины сделать метод окончательным
- Когда метод является окончательным, он может быть встроен.
- Когда метод является окончательным, метод невозможно переопределить.
Конечно может. Делает невозможным переопределение.
Конечно, ознакомьтесь с Последнее слово в последнем ключевом слове
public abstract class AbstractBase
{
public final void performOperation() // cannot be overridden
{
prepareForOperation();
doPerformOperation();
}
protected abstract void doPerformOperation(); // must override
}
Да.
Метод final не может быть переопределен подклассами. Это часто используется для предотвращения изменения поведения класса подклассами.
В качестве примечания к другим ответам. Вы можете использовать final. На практике я редко вижу людей, использующих его, и я не уверен, почему.
Большая часть кода, который я пишу в эти дни, предназначена для многопоточных сред, и я стремлюсь сделать класс final неизменяемым (если это класс значений), чтобы он был потокобезопасным.
Проблема с пометкой некоторых методов как final (а не других) заключается в том, что вы заявляете, что в этом методе есть что-то особенное, а в других нет ничего особенного. По моему опыту, это редко то, что люди на самом деле имеют в виду.
Если класс предназначен для наследования, вам нужно содержать его в чистоте и сохранять его небольшим, чтобы предотвратить нежелательные побочные эффекты. Все это зависит от того, пишете ли вы код для себя и своей команды или же вы пишете для более широкой аудитории — например, общедоступный API в проекте с открытым исходным кодом или коммерческий проект.
да, ключевое слово final можно использовать для метода. Это сохранит неизменность. это предотвращает разрыв между методами. Например, предположим, что реализация некоторого метода класса X предполагает, что метод M будет вести себя определенным образом. Объявление X или M как final предотвратит переопределение M производными классами таким образом, чтобы заставить X вести себя неправильно.