如果不使用final关键字,如何才能使类不可扩展?

Mog*_*sSs 4 java class

如何在没有final关键字的情况下实现此目的?我必须改变什么构造函数?

 public final class testName {
     testName() {
        //do something
     }
 }
Run Code Online (Sandbox Code Playgroud)

emb*_*oss 13

如果您制作了所有的构造函数private,那么该类也将不再可扩展.

public class TestName {

    private TestName(){do something}

}
Run Code Online (Sandbox Code Playgroud)

要了解原因,请查看第3.4.4.1节"默认构造函数".通过声明您的私有默认构造函数,该段落的最后一句包含:

永远不能从类外部调用这样的[private]构造函数,但它会阻止自动插入默认构造函数.

因此,通过在超类中声明一个不可访问的构造函数来实现,没有(其他)构造函数可以调用子类,因此Java会阻止编译.

  • 子类中的每个构造函数都必须调用超级构造函数.如果不是,则使用隐式构造函数.使所有超级构造函数私有(包括隐式构造函数)将导致编译错误. (2认同)