java中构造方法的提问。还得麻烦高手.....

来源:百度知道 编辑:UC知道 时间:2024/06/22 08:52:27
class a{
a(){System.out.println("1");}}
class b extends a{
b(){System.out.println("2");}}
class x extends b{
x(){super ();
System.out.println("3");}
public static void main(String args []){
new x();}}
请高手看以上程序。当创建x时,先调用最上层的a的构造方法,打印出1,然后又调用b,打印出2,然后在执行自己的构造方法时,不是先调用了b类的构造方法么?然后才打印的3,
小弟认为结果应该是1223啊,哪里理解错了?请高手指教!

运行顺序:
x类的构造方法通过super()显示调用父类b的构造方法;
b的构造方法里虽然没写,但是编译器会添加上super(),这种是隐式调用父类a的构造方法;
调用a类的构造方法,输出1;
返回到b类构造方法,输出2;
返回到x类构造方法,输出3。
结束!~

x构造函数中的super()是默认调用的,即如果你没有写,编译器编译时也会添加上super(),如果写了,就省了编译器的事了