为什么构造函数不能是最终的?

时间:2016-03-14 11:12:07

标签: java constructor final

众所周知,构造函数无法被覆盖。所以当我们将构造函数声明为final时,为什么会给出编译时错误?由于final关键字也会让构造函数不要覆盖。

2 个答案:

答案 0 :(得分:0)

仅允许publicprivateprotected作为修饰符。根据{{​​1}},final是不允许的。 java中的JLS是限制扩展名。

在java final中无法覆盖。始终从基类的任何构造函数(隐式或显式)调用超类的构造函数。 constructors用于防止任何方法被覆盖,构造函数不像普通方法,也不能是final。将overridden设为constructors将毫无意义。这不会被定义为任何特征。

如果您希望阻止其扩展,可以将该课程设为最终。如果您希望限制类的构造函数,只需将其设为私有。

答案 1 :(得分:0)

永远不能宣布Constructors final。您的编译器将始终给出错误类型" modifer final不允许" 最后,当应用于方法时,意味着不能在子类中重写该方法。 构造函数不是普通的方法。 (适用不同规则) 此外,构造函数永远不会继承。所以宣布最终决定没有任何意义。