如果没有final
关键字,我怎样才能做到这一点?我必须改变什么构造函数?
public final class testName {
testName() {
//do something
}
}
答案 0 :(得分:12)
如果您制作了所有的构造函数private
,那么该类也将不再可扩展。
public class TestName {
private TestName(){do something}
}
要了解原因,请查看第3.4.4.1节'The default constructor'。通过声明您的私有默认构造函数,该段落的最后一句包含:
这样的[private]构造函数永远不能从类外部调用,但它会阻止自动插入默认构造函数。
通过在超类中声明一个不可访问的构造函数,有效地实现了子类可以调用的(其他)构造函数,因此Java阻止了编译。
答案 1 :(得分:3)
如果构造函数由于在“// do something”注释中插入代码而失败,则抛出异常。
其他选项 - final类或私有构造函数 - 通常是更好的选择,因为它们在编译时报告错误,而不是运行时。但是如果失败应该是有条件的,或者有人正在测试你的知识,那么抛出异常是通常的方法。
[专家问题:如果构造函数抛出异常,那么程序是否仍然可以最终引用新创建的实例? (提示:是的。)]
答案 2 :(得分:0)
您可以创建该类的私有构造函数。