国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

內部類可以覆蓋嗎?

2019-11-18 12:08:26
字體:
來源:轉載
供稿:網友

  若創建一個內部類,然后從封裝類繼續,并重新定義內部類,那么會出現什么情況呢?也就是說,我們有可能覆蓋一個內部類嗎?這看起來似乎是一個非常有用的概念,但“覆蓋”一個內部類——好象它是外部類的另一個方法——這一概念實際不能做任何事情:
  
  //: BigEgg.java
  // An inner class cannot be overriden
  // like a method
  
  class Egg {
   PRotected class Yolk {
    public Yolk() {
     System.out.println("Egg.Yolk()");
    }
   }
   private Yolk y;
   public Egg() {
    System.out.println("New Egg()");
    y = new Yolk();
   }
  }
  
  public class BigEgg extends Egg {
   public class Yolk {
    public Yolk() {
     System.out.println("BigEgg.Yolk()");
    }
   }
   public static void main(String[] args) {
    new BigEgg();
   }
  } ///:~
  
  默認構建器是由編譯器自動合成的,而且會調用基礎類的默認構建器。大家或許會認為由于預備創建一個BigEgg,所以會使用Yolk的“被覆蓋”版本。但實際情況并非如此。輸出如下:
  
  New Egg()
  Egg.Yolk()
  
  這個例子簡單地揭示出當我們從外部類繼續的時候,沒有任何額外的內部類繼續下去。然而,仍然有可能“明確”地從內部類繼續:
  
  //: 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();
   }
  } ///:~
  
  現在,BigEgg2.Yolk明確地擴展了Egg2.Yolk,而且覆蓋了它的方法。方法insertYolk()答應BigEgg2將它自己的某個Yolk對象上溯造型至Egg2的y句柄。所以當g()調用y.f()的時候,就會使用f()被覆蓋版本。輸出結果如下:
  
  Egg2.Yolk()
  New Egg2()
  Egg2.Yolk()
  BigEgg2.Yolk()
  BigEgg2.Yolk.f()
  
  對Egg2.Yolk()的第二個調用是BigEgg2.Yolk構建器的基礎類構建器調用。調用
  
  g()的時候,可發現使用的是f()的被覆蓋版本。

上一篇:引用外部類對象

下一篇:從內部類繼承

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东乡县| 苗栗市| 唐河县| 通江县| 孟村| 德庆县| 伊川县| 桃源县| 探索| 林州市| 长沙市| 思南县| 开远市| 织金县| 绥棱县| 北宁市| 常宁市| 乌恰县| 延津县| 龙州县| 平塘县| 开原市| 邹平县| 英吉沙县| 蕲春县| 定边县| 景洪市| 吉安县| 淮北市| 新干县| 库伦旗| 巴马| 兴业县| 泰州市| 永登县| 竹北市| 辽宁省| 尚志市| 扬州市| 平阴县| 渑池县|