不会。初始化块直接复制到构造函数中。显然那里也有一个隐式的超级。所以你的例子变成
public class Foo {
public Foo()
{
{System.out.println("Foo init");} // initializer.
{System.out.println("Foo constr");}
}
}
public class Main extends Foo {
public Main()
{
super(); // super constructor.
{System.out.println("Main init");} // initializer.
{System.out.println("Main constr");}
}
public static void main(String[] args) {
new Main();
}
}
这解释了您观察到的行为
Foo init
Foo constr
Main init
Main constr