回 帖 发 新 帖 刷新版面

主题:关于private的一个问题,谁能帮我看一下一个,困扰我几天了.

class Egg2 {
  protected class Yolk {
    public Yolk() {
      System.out.println("Egg2.Yolk()");
    }
    public void f() {
      System.out.println("Egg2.Yolk.f()");
    }
  }
  [color=800000]private Yolk y = new Yolk();[/color]
  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();
}
}
它的运行结果是
[color=800000]Egg2.Yolk()[/color]
这句运行是不是private Yolk y = new Yolk()起的作用?
BigEgg2()得到实例化后他继承Egg2()的private Yolk y = new Yolk()这个语句吗?
继承的话实例化的话也是Egg2()的Yolk(),为什么?
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()

回复列表 (共7个回复)

沙发

要不是考题就别再费神了,把类套着写恐怕以后你也不会再见到了。
有很多别的更有意义的东西需要学,有精神去研究一下多态的实际应用,比这狗屁不通的类更有实际价值

板凳

[quote]要不是考题就别再费神了,把类套着写恐怕以后你也不会再见到了。
有很多别的更有意义的东西需要学,有精神去研究一下多态的实际应用,比这狗屁不通的类更有实际价值[/quote]

对头
实际应用中一般都不会套着写类

3 楼

同意,这是在没有太大的意义!
有时间去研究下java模式

4 楼

虽然类中嵌套类,但你提问的问题是初始化的问题
初始化的顺序是先静态,再成员变量,后是构造函数
由于继承问题,在装载BigEgg2类时也装载了Egg2类,
而private Yolk y = new Yolk();在Egg2中是成员变量,所以先执行这一行
呵呵,如果还不明白的话,再说出来,我再详细的解释给你

5 楼


谢谢大家,不过我已经弄明白了[em2]

6 楼

楼上的一帮2b吧~
不会回答就闭嘴~扯他妈什么呢~
很明显是先执行父类的构造函数阿,执行完内部类也要执行执行父类的父类构造函数,是这句话起的作用public class Yolk extends Egg2.Yolk

7 楼

其实我觉得前几位说得很有道理,没必要在这种东西上搞来搞去,大概知道其原理就行,java不是用来考试的.

我来回复

您尚未登录,请登录后再回复。点此登录或注册