class A {
  A() { 
    System.out.println("Inside A's constructor.");
  }
}
// 创建A的以个子类.
class B extends A {
  B() {
    System.out.println("Inside B's constructor.");
  }
}
// 创建另一个子类继承B.
class C extends B {
  C() {
    System.out.println("Inside C's constructor.");
  }
}
class CallingCons {
  public static void main(String args[]) {
    C c = new C();
  }
}
子类与父类之间构造函数的调用是怎么一回事,请高手解释下!

解决方案 »

  1.   

    你要么重写父类的构造方法,就像你这段代码里的;要么直接调用父类的构造方法,就用super关键字调用就好了。
      

  2.   

    首先你创建了类A,
    再创建类B继承类A,
    再创建类C继承类B,
    然后在CallingCons类里实例化类C,
    因为类C继承了类B里的所有方法与父类的所有方法,
    所以会打印出类A,类B,类C里的所有方法。
    假如子类从写了父类的方法,想要调用父类被隐藏的方法就用Super。
      

  3.   

    若子类没有定义自己的构造函数,则调用父类的构造函数。若该父类也未定义构造函数,则调用父类的父类的构造函数。
    以此类推。
    你可以依次把各类的构造函数用注释符//屏蔽掉,然后测试一下结果。
    例子:
    class a{
    a(){System.out.println("In a\n\n");}
    }
    class b extends a{
    b(){System.out.println("In b\n\n");}
    }
    class c extends b{
    c(){System.out.println("In c\n\n");}
    }
    public class test1
    {
    public static  void main(String a[])
    {
    a a1=new a();
    System.out.println("************************************");
    b b1=new b();
    System.out.println("************************************");
    c c1=new c();
    }
    }
      

  4.   

    构造函数的调用 是从父类到子类的顺序。
    也就是说你的那个程序输出是:
       Inside A's constructor;
       Inside B's constructor;
       Inside C's constructor;
    要是析构函数的话是从子类到父类的顺序。
      

  5.   

    子类无论如何都会调用父类的构造函数进行从父类继承下来成员的初始化的。父类若重载了构造函数那子类必须在它自己的构造函数中显示的调用super(参数);若父类没有重载,在子类的构造函数中可以不用显示调用super();
      

  6.   

    子类先调用父类的构造函数,一路往上直到object类,再一路往下执行
      

  7.   

    子类不能直接继承父类的构造函数,只能直接调用父类的构造函数。用super()构造