1。这里面i的取值没有意义
2。这个测试应该是用来察看类和父类的构造函数的调用顺序
3。初始化PlaceSetting,就回调用父类Custom
new Spoon,就回调用父类Utensil
同理可得

解决方案 »

  1.   

    那些 int 其实半点作用都没有,完全可以不必理会。
    只是为了弄出个“非默认”的构造函数,所以硬加个参数而已。这样就要显
    式地调用父类的构造函数(即super(i))。只是为了演示,好让这个例子的调用流程更加清晰。
    流程:super(i+1)即调用custom(i+1),显示Custom constructor
          new Spoon(i+2)先调用父类的constructor Utensil(i+2),然后
          再调用 Spoon(i+2)
          以下同理。
      

  2.   


    Example:
    A extends B;B extends C程序运行顺序:C中的interface/static-->B中的interface/static-->A中的interface/static-->C中的instance variable/constructor-->B中的instance variable/constructor-->A中的instance variable/constructor-->A中的main()里面还有更深的概念,自己写程序去试:System.out.println("check: "+ variable):
      

  3.   

    你的这个程序其实就讲一个道理:
    首先你可以看一下他们之间的继承关系:
    我抽一个出来讲吧:
             Utensil
                +
        --------+---------
        |       |        |
        Spoon  Fork      KnifeSpoon、Fork、Knife三个一共有一个共同的父类,而在new Spoon(i+2);的时间,super(i);先调用父类的构件器Utensil(int i){
            System.out.println("Utensil constructor");
        }所以先
            System.out.println("Utensil constructor");而后
            System.out.println("Spoon construtor");其他都一样PlaceSetting(9)对其他的没有什么影响,只是告诉你需要先构件9个构件器,
    new Spoon(i+2)的时间,系统给声明的sp分配内存
      

  4.   

    这个非常简单的
    就是关于constructor 继承的问题
    你只要知道在构造一个子类的instance时它的调用顺序就ok

    子类先调用父类的constructor在执行自己的constructor
    多层继承就顺着根往上走
    有点递归调用的味道
    ok