解决方案 »

  1.   

    这里在父类引用指向子类对象的时候.要创建子类对象.要先调用父类构造方法:run()和show()第一个输出结果是run方法的结果.因为你在子类中重写了show方法.所以接下来的show方法因为多态原理输出的是子类中show的结果,但是因为父类构造方法还没有结束之前不能构造子类对象,所以这个时候子类中的i的值还没有被赋值为7,默认一个int类型的数赋值为0,所以输出的是Zi_test0,到这时候.父类构造方法结束,进入子类构造方法,给i赋值为7,输出结果为Zi_test7,然后又通过父类引用f调用了show方法,因为多态的特性,调用的还是子类的show方法,结果为Zi_test7
      

  2.   


    Fu_test4//首先初始化Fu类,加载Fu()方法,调用run()方法,所以显示为Fu_test4
    Zi_test0//由于Fu中的show方法被zi类覆写,所以调用zi类的show()方法,而此时zi类中的i还没有被初始化为7,仍然为默认初始化值0,所以打印为Zi_test0
    Zi_test7//接着调用zi类中的show()方法,此时i被初始化为7,Zi_test7
    Zi_test7//调用zi类的show方法,i已经被初始化为7了,所以打印Zi_test7
      

  3.   

    可以参考Thinking in Java
      

  4.   

    1,super();
    2,成员变量显示初始化(赋值,原本int默认的是0);
    3,构造代码块显示初始化(你的代码里没有代码块所以不需要);
    4,执行方法;
    应该是这个顺序吧- -