如何在没有final
关键字的情况下实现此目的?我必须改变的构造函数?如何在不使用final关键字的情况下让类不能扩展?
public final class testName {
testName() {
//do something
}
}
如何在没有final
关键字的情况下实现此目的?我必须改变的构造函数?如何在不使用final关键字的情况下让类不能扩展?
public final class testName {
testName() {
//do something
}
}
如果您制作所有的构造函数private
,那么该类将不再可扩展。
public class TestName {
private TestName(){do something}
}
想知道为什么,检查节3.4.4.1,'The default constructor'。通过声明你的私人默认的构造函数,该段的最后一句成立:
这样的[私人]构造函数永远不能从类之外调用,但它防止了默认构造函数的自动插入。
通过在超类中声明一个不可访问的构造函数非常有效,您的子类可以调用没有(其他)构造函数,因此Java会阻止编译。
如果构造函数由于在“// do something”注释中插入代码而失败,则抛出异常。
其他选项 - 最终类或私有构造函数 - 通常是更好的选择,因为它们在编译时报告错误,而不是运行时。但是如果失败应该是有条件的,或者如果有人正在测试你的知识,那么抛出异常是通常的方法。
[专家的问题:如果构造函数抛出一个异常,程序是否还有任何方式可以结束对新创建的实例的引用? (提示:是。)]
如果可以的话,我会给你+10的真棒专家问题。谢谢,杰夫。 – Raku
您可以制作该类的私有构造函数。
为什么不使用final? – fvu
你的动机是什么? final关键字应该符合你的上述要求。你想成为java的语法专家吗? – blowyourheart
是的,这是一个测试,我不得不解决 – MoglisSs