Java-конструктор неявно final, статические / нестатические аспекты его семантики неявно 1 и бессмысленно , чтобы конструктор Java был абстрактным.
Это означает, что модификаторы final
и static
будут избыточными, а ключевое слово abstract
не будет иметь никакого значения вообще.
Естественно, разработчики Java не видели в какой-либо моменте возможности использования избыточных и / или бессмысленных модификаторов доступа для конструкторов ... поэтому они не допускаются грамматикой Java.
В сторону: Обидно, что они не сделали тот же самый вызов дизайна для методов интерфейса, где модификаторы public
и abstract
также избыточны, но разрешены в любом случае.Возможно, есть какая-то (древняя) историческая причина для этого.Но в любом случае его нельзя исправить, не сделав (возможно) миллионы существующих Java-программ некомпилируемыми.
1 - На самом деле конструкторы имеют смесь статической и нестатической семантики.Вы не можете "вызвать" конструктор в экземпляре, и он не наследуется и не может быть переопределен.Это похоже на работу статических методов.С другой стороны, тело конструктора может ссылаться на this
и вызывать методы экземпляра ... как метод экземпляра.И затем есть цепочка конструктора, которая является уникальной для конструкторов.Но реальная суть в том, что эта семантика фиксирована, и нет смысла разрешать избыточный и, вероятно, сбивающий с толку модификатор static
.