Как мы все знаем, конструктор нельзя переопределить. Итак, когда мы объявляем конструктор как final
, почему он дает ошибку времени компиляции? Поскольку ключевое слово final
также позволит конструктору не переопределять.Почему конструктор не может быть окончательным?
ответ
Только public
, private
, protected
допускаются как модификаторы. final
не разрешено согласно JLS
. final
в java - это ограничение расширения.
В java constructors
нельзя переопределить. Конструктор суперкласса всегда вызывается из любого конструктора базового класса (неявно или явно). final
используется для предотвращения переопределения любого метода, конструкторы не похожи на обычные методы, а также не могут быть overridden
. constructors
как final
не имеет никакого смысла. Это не будет определяться как любая функция.
Вы можете сделать класс окончательным, если хотите предотвратить его расширение. Если вы хотите ограничить конструктор класса, просто сделайте его закрытым.
№ Constructors
НИКОГДА не может быть объявлен final
. Ваш компилятор всегда будет давать ошибку типа «modifer final
». Финал, применяемый к методам, означает, что метод не может быть переопределен в подклассе. Конструкторы НЕ являются обычными способами. (применяются другие правила) Кроме того, конструкторы НИКОГДА не унаследованы. Таким образом, в объявлении окончательного нет НЕСКОЛЬКО.
Какой язык вы имеете в виду? – KonstantinL
На языке Java. –
Конструкторы - это не обычные методы. Конструкторы никогда не наследуются, поэтому нет смысла объявлять их окончательными. – Flaugzig