因为你在子类中根本就没有把内部类事例化。也就是说,子类中根本没有Yolk对象,怎么回调用Yolk的构造函数呢?

解决方案 »

  1.   

    首先谢谢你的帮助
    但是我还是没明白,因为按我上面总结的那个构件器的调用顺序
    ,子类中内部类的构件器会调用的啊,
    至少应该输出一个BegEgg2.Yolk()啊,
    难道是我总结的调用顺序不正确么?
      

  2.   

    当去掉第23行后,使用默认的子类构造函数,这时候程序的顺序为:1 初始化父类
    2 初始化子类
    3 调用e2.g()初始化父类的过程:
    1.1 初始化所有变量 -> 在初始化 private Yolk y=new Yolk() 的时候打印出
    Egg2.Yolk()
    1.2 父类构造函数被调用 -> 打印出 new Egg2()由于子类没有变量,而且使用默认构造函数,所以“初始化子类”本身什么事都没做最后调用 e2.g() 的时候打印出 Egg2.Yolk.f()其实第二中情况很简单的,根本没有涉及到内部类的问题。相反第一种情况倒是很复杂的第一种情况的第二行虽然和第二种情况是一样的,都是new Egg2(),但经历的过程是不一样的,这点需要注意,不要被迷惑了。