解决方案 »

  1.   

    public class Test
    {
    public static void main(String[] args)
    {
    Child c = new Child();   //第一步:生成对象,调用子类构造方法;
    }
    }class Father
    {
    public Father()
    {
    System.out.println("父类无参构造函数");
    } public Father(String name)
    {
    //第四步:打印;
    System.out.println("父类有参构造函数");
    }
    }class Child extends Father
    {
    public Child()
    {
    this("dd"); //第二步,调用Child类的有参构造方法;
    System.out.println("子类无参构造函数");
    } public Child(String name)
    {
    super("dd"); //第三步,调用父类的有参构造方法;
    System.out.println("子类有参构造函数");
    }
    }
    所以从最里层开始打印;
      

  2.   

    回答你这个问题前,先告诉你一个继承里面关于子父类各自的构造函数继承的问题,子类继承父类,子类的构造函数默认第一行是super()     如果你写了 this (X) 或者是 super(X)   其中里面的super(X) 是父类有参数构造,  那么它的默认的super() 就会被你写的覆盖了,   你这题是先创建一个子类对象,并且new Child();是无参数构造  ,他就会去找子类的无参数构造,结果执行第一行 发现了this(“dd”),就会调用本类的有参数构造,到了有参数构造中发现了super(“dd”)‘于是去找父类有参构造,打印了第一句,在打印子类有参构造,之后回到子类无参构造打印最后一句