众所周知,构造函数无法被覆盖。所以当我们将构造函数声明为final
时,为什么会给出编译时错误?由于final
关键字也会让构造函数不要覆盖。
答案 0 :(得分:0)
仅允许public
,private
,protected
作为修饰符。根据{{1}},final
是不允许的。 java中的JLS
是限制扩展名。
在java final
中无法覆盖。始终从基类的任何构造函数(隐式或显式)调用超类的构造函数。 constructors
用于防止任何方法被覆盖,构造函数不像普通方法,也不能是final
。将overridden
设为constructors
将毫无意义。这不会被定义为任何特征。
如果您希望阻止其扩展,可以将该课程设为最终。如果您希望限制类的构造函数,只需将其设为私有。
答案 1 :(得分:0)
永远不能宣布Constructors
final
。您的编译器将始终给出错误类型" modifer final
不允许"
最后,当应用于方法时,意味着不能在子类中重写该方法。
构造函数不是普通的方法。 (适用不同规则)
此外,构造函数永远不会继承。所以宣布最终决定没有任何意义。