日期:2014-05-20  浏览次数:20775 次

帮忙解释下这段代码
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();
  }
}
子类与父类之间构造函数的调用是怎么一回事,请高手解释下!

------解决方案--------------------
首先你创建了类A,
再创建类B继承类A,
再创建类C继承类B,
然后在CallingCons类里实例化类C,
因为类C继承了类B里的所有方法与父类的所有方法,
所以会打印出类A,类B,类C里的所有方法。
假如子类从写了父类的方法,想要调用父类被隐藏的方法就用Super。
------解决方案--------------------
若子类没有定义自己的构造函数,则调用父类的构造函数。若该父类也未定义构造函数,则调用父类的父类的构造函数。
以此类推。
你可以依次把各类的构造函数用注释符//屏蔽掉,然后测试一下结果。
例子:
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();
}
}
------解决方案--------------------
探讨
构造函数的调用 是从父类到子类的顺序。
也就是说你的那个程序输出是:
Inside A's constructor;
Inside B's constructor;
Inside C's constructor;
要是析构函数的话是从子类到父类的顺序。

------解决方案--------------------
在子类构造函数时候,查看有无父类的构造方法,如果有就会先执行父类的构造方法。
理解可以认为现有父亲,然后再有儿子。