2016-03-14 10 views
0

Как мы все знаем, конструктор нельзя переопределить. Итак, когда мы объявляем конструктор как final, почему он дает ошибку времени компиляции? Поскольку ключевое слово final также позволит конструктору не переопределять.Почему конструктор не может быть окончательным?

+2

Какой язык вы имеете в виду? – KonstantinL

+0

На языке Java. –

+3

Конструкторы - это не обычные методы. Конструкторы никогда не наследуются, поэтому нет смысла объявлять их окончательными. – Flaugzig

ответ

0

Только public, private, protected допускаются как модификаторы. final не разрешено согласно JLS. final в java - это ограничение расширения.

В java constructors нельзя переопределить. Конструктор суперкласса всегда вызывается из любого конструктора базового класса (неявно или явно). final используется для предотвращения переопределения любого метода, конструкторы не похожи на обычные методы, а также не могут быть overridden. constructors как final не имеет никакого смысла. Это не будет определяться как любая функция.

Вы можете сделать класс окончательным, если хотите предотвратить его расширение. Если вы хотите ограничить конструктор класса, просто сделайте его закрытым.

0

Constructors НИКОГДА не может быть объявлен final. Ваш компилятор всегда будет давать ошибку типа «modifer final». Финал, применяемый к методам, означает, что метод не может быть переопределен в подклассе. Конструкторы НЕ являются обычными способами. (применяются другие правила) Кроме того, конструкторы НИКОГДА не унаследованы. Таким образом, в объявлении окончательного нет НЕСКОЛЬКО.