class FatherClass
{
  public FatherClass()
  {
      System.out.println("FatherClass create");
  }
}
public class ChildClass extends FatherClass
{
   public ChildClass()
   {
      System.out.println("ChildClass create");
   }
  
   public static void main(String[] args)
   {
     FatherClass f = new FatherClass();
     ChildClass  c = new ChildClass();
   }
}
请好手们说下详细的执行顺序(结合输出结果),谢谢了。

解决方案 »

  1.   

    FatherClass create
    FatherClass create
    ChildClass create
      

  2.   

    1.先执行main方法中的FatherClass f = new FatherClass();
    所以调用FatherClass的构造方法,打印FatherClass create;
    2.执行ChildClass c = new ChildClass();
    因为ChildClass继承FatherClass ,所以在调用ChildClass 时先会调用它父类的构造方法,即
    public ChildClass()
    {
    System.out.println("ChildClass create");
    }相当于
    public ChildClass()
    {
    super();
    System.out.println("ChildClass create");
    }
    即使你不写,他也会调用默认的super();因此会先打印FatherClass create;再打印ChildClass create
      

  3.   

    结果是正确的,执行到ChildClass c = new ChildClass();
    的时候,是先执行子类的构造方法还是父类的构造方法?
      

  4.   

    再问问:在main方法里
    FatherClass f = new ChildClass();
    ChildClass c = new ChildClass();
    这两个执行的结果是一样的,申明时:f是父类的对像,C是子类的对像,有什么区别吗?谢谢了
      

  5.   

    有区别的,如果你只用一个对象f.调用父类的方法是不能实现的,而子类可以,或者你可以用子类继承父类的方法,
    用 ChildClass c=new ChildClass();
    c.FatherClass();//调用父类的方法
    c.ChildClass();//调用子类的方法
      

  6.   


    先执行父类的构造方法
    然后再执行子类的构造方法子类的构造方法中默认调用了super()...