作了一个小程序,实现继承功能。对构造函数,方法的执行顺序有点疑惑。程序如下,
class BaseClass{
    public BaseClass(){
      System.out.println("Now in BaseClass()");
      init();
    }
    public void init(){
      System.out.println("Now in BaseClass.init()");
    }
  }  public class SuberClass extends BaseClass{
    public SuberClass() {
      super.init();
      System.out.println("Now in SuberClass()");
    }
    public void init() {
      System.out.println("Now in SuberClass.init()");
    }
    public static void main(String[] args) {
      System.out.println("创建BaseClass对象:");
      new BaseClass();
      System.out.println("创建SuberClass对象:");
      new SuberClass();
    }
  }
打印结果是:创建BaseClass对象:
Now in BaseClass()
Now in BaseClass.init()
创建SuberClass对象:
Now in BaseClass()
Now in SuberClass.init()
Now in BaseClass.init()
Now in SuberClass()
继承后调用super后,是否先执行父类的构造函数,然后是子类的构造函数,然后再是父类的方法,其次是自类的方法啊.

解决方案 »

  1.   

    初始化顺序,
    1.显示或隐示的调用super()
    2.显示的调用this()
    3.初始化类变量
    4.执行构造体
    这个是一个递归的过程
      

  2.   

    顺序如下:
    1、 System.out.println("创建BaseClass对象:");
    2、new BaseClass();
       (1)System.out.println("Now in BaseClass()");
       (2)init();
       (3)System.out.println("Now in BaseClass.init()");
    3、System.out.println("创建SuberClass对象:");
    4、new SuberClass();
       (1)先执行父类的构造函数
       (2)在父类的构造函数里的init方法要使用覆盖,调用子类的init方法
       (3)执行子类的构造函数
       (4)调用super即父类的init方法
       (5)System.out.println("Now in SuberClass()");
    5、结束。
    呵呵。好象应该是这样的。没有调试