關於繼承內部類——java程式設計思想示例程式分析; (轉)

a400發表於2007-08-16
關於繼承內部類——java程式設計思想示例程式分析; (轉)[@more@]

關於繼承內部類——思想示例分析;
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()

執行順序:
1、Egg2 e2 = new BigEgg2();子類在例項化之前,先父類構造方法,父類構造方法先初始化類成員;
有  private Yolk y = new Yolk();,y作為Egg2類的成員先被初始化;先呼叫Egg2內部類yolk的構造;列印出Egg2.Yolk();
2、呼叫Egg2的建構函式;列印出Egg2.Yolk();
3、呼叫BigEgg2的建構函式;因為它insertYolk(new Yolk());這裡的new Yolk是BigEgg2的內部類的例項;這個內部類繼承了Egg2中的內部類

;所以先呼叫了Egg2中Yolk的建構函式;列印出Egg2.Yolk();
4、呼叫BigEgg2.Yolk的建構函式;列印出BigEgg2.Yolk();
5、e2.g();列印出BigEgg2.Yolk();

我不知道分析的對不對,如果不對,請指教to:zhaoqb@neusoft.com或者zqb@hanhuasoft.com">zhaoqb@neusoft.com
或者
zqb@hanhuasoft.com


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10790690/viewspace-961345/,如需轉載,請註明出處,否則將追究法律責任。

相關文章