使用受保护的构造函数对类进行匿名初始化

Tin*_*nki 6 java anonymous initialization

我们假设我们有一个班级:

public class SomeClass {    
    protected SomeClass () { 
    }
}
Run Code Online (Sandbox Code Playgroud)

MainClass位于不同的包中我尝试执行两行:

public static void main(String[] args) {
    SomeClass sac1 = new SomeClass(); 
    SomeClass sac2 = new SomeClass() {}; 
}
Run Code Online (Sandbox Code Playgroud)

由于protected构造函数,在这两种情况下我都希望程序失败.令我惊讶的是,匿名初始化工作正常.有人可以解释为什么第二种初始化方法可以吗?

Sot*_*lis 9

你的匿名课

SomeClass sac2 = new SomeClass() {}; 
Run Code Online (Sandbox Code Playgroud)

基本上变成了

public class Anonymous extends SomeClass {
    Anonymous () {
        super();
    }
}
Run Code Online (Sandbox Code Playgroud)

构造函数没有访问修饰符,因此您可以在同一个包中无问题地调用它.您也可以调用,super()因为protected可以从子类构造函数访问父构造函数.