java一个内部类覆盖的问题,这段代码的运行顺序是什么?

//:bigegg2.java//properinheritanceofaninnerclassclassegg2{protectedclassyolk{publicyo... //: bigegg2.java
// proper inheritance of an inner class
  
  class egg2 {
   protected class yolk {
    public yolk() {
     system.out.println("egg2.yolk()");
    }
    public void f() {
     system.out.println("egg2.yolk.f()");
    }
   }
   private yolk y = new yolk();
   public egg2() {
    system.out.println("new egg2()");
   }
   public void insertyolk(yolk yy) { y = yy; }
   public void g() { y.f(); }
  }
  
  public class bigegg2 extends egg2 {
   public class yolk extends egg2.yolk {
    public yolk() {
     system.out.println("bigegg2.yolk()");
    }
    public void f() {
     system.out.println("bigegg2.yolk.f()");
    }
   }
   public bigegg2() { insertyolk(new yolk()); }
   public static void main(string[] args) {
    egg2 e2 = new bigegg2();
    e2.g();
   }
  } /*egg2.yolk()
  new egg2()
  egg2.yolk()
  bigegg2.yolk()
  bigegg2.yolk.f()
///:~

为什么输出的第一个是egg2.yolk(),而不是new egg2()。不是应该先运行egg2的构造器吗?
这对个程序在《java编程思想》第四版的213页。
展开
 我来答
帐号已注销
2017-09-05 · 超过128用户采纳过TA的回答
知道小有建树答主
回答量:409
采纳率:60%
帮助的人:163万
展开全部
我瞅了半天,说下我的理解(◕ˇ∀ˇ◕)
egg2 e2=new bigegg2();执行时候
首先bigegg2的构造执行之前默认初始化父类
即有egg2类的
yolk=new yolk(); (先于构造执行,输出egg2.yolk())
public egg2(); (输出new egg2())

同理接下来子类构造执行时候,new yolk()会执行父类的内部类,然后子类的内部类。
(◕ˇ∀ˇ◕)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式