<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    潛魚在淵

    Concentrating on Architectures.

    posts - 77, comments - 309, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    代碼檢查(3)

    Posted on 2008-10-26 01:42 非魚 閱讀(2562) 評論(1)  編輯  收藏 所屬分類: 面向對象設計Java技術
    3. 父類引用子類

    這是說一個父類保存了其子類的引用,返回具體的其子類類型,以具體的其子類類型做為方法的參數,或者在方法中以本地變量的方式使用、初始化了具體的其子類實例。一句話,父類的任何地方都不應該出現“以其子類型”定義的靜態變量、實例變量和本地變量(Local variables)。

    組合關系

    父類組合(Composite)其子類的關系不能存在,因為這會導致運行時刻的遞歸初始化,產生StackOverflow錯誤,代碼如下:

    public class Base {
      Derived d = new Derived();

      // 或者在構造方法中調用new Derived();
      public Base() {
        d = new Derived();
      }
    }

    public class Derived extends Base {
    }

    只要存在父類組合其子類的關系,即要在父類初始化時刻同時初始化其子類,必定導致這樣的問題,無論是在定義實例變量的時候初始化,還是在構造器中初始化。當然,即使實例變量定義為父類,如果實際初始化的是其子類,也會產生同樣的錯誤。

    聚合關系

    父類聚合(Aggregate)其子類的關系也不應該存在。聚合關系和組合關系的不同就在于初始化過程,在聚合關系中,其子類的初始化不在父類初始化過程中,這不會導致遞歸問題。但這并不是說這樣做就是好的。

    直接以其子類型定義靜態變量、實例變量,等于把抽象的父類綁定到了具體的子類型。這是對“繼承關系是一種抽象關系”的破壞,它使更抽象的父類不再具有抽象的涵義。

    在父類方法的實現中,以其子類型定義本地變量,和父類聚合其子類“效果”是一樣的。

    以父類型或者更抽象的類型來定義變量

    在父類中,可以使用父類型或者更抽象的類型來定義變量。雖然不是一種很好的實踐,但有時的確需要把其子類型的實例付值給這些變量。一般情況下,這樣做的時候會選擇動態加載子類的實例:

    public abstract class Factory {
      private static Factory instance;

      public synchronized static Factory getInstance() {
        // 從配置文件中讀取子類型名稱
        String factoryName = readFromConfig();
        instance = Class.forName(factoryName).newInstance();
        ....
      }

      public Object createSomething();
    }

    即使如此,我個人的看法是,盡可能避免使用子類的實例。


    , , , ,


    評論

    # re: 代碼檢查(3)  回復  更多評論   

    2008-12-22 16:04 by lbom
    先有父,才有子,按樓主的寫法,是在父類中使用子類,是不是有點順序顛倒哦。
    通常的用法可以使用虛擬父類+子類來構建父子關系
    主站蜘蛛池模板: 亚洲视频在线一区二区| 91老湿机福利免费体验| 国产成人综合久久精品免费| 免费中文字幕视频| 免费黄网在线观看| 无码天堂亚洲国产AV| 日韩a级毛片免费视频| 亚洲AV无码一区二区三区鸳鸯影院| 日本免费电影一区| 黄色免费网址在线观看| 亚洲性日韩精品国产一区二区| 特级毛片A级毛片100免费播放| 亚洲免费一区二区| 999zyz**站免费毛片| 免费H网站在线观看的| 丁香婷婷亚洲六月综合色| 国外成人免费高清激情视频| 亚洲av第一网站久章草| 久久久青草青青国产亚洲免观| 亚洲一区二区三区在线观看蜜桃| 免费一本色道久久一区| 夜夜亚洲天天久久| 亚洲一区二区三区高清在线观看| 在线免费观看污网站| 国产成人亚洲精品电影| 亚洲中文字幕无码久久精品1| 亚洲精品无码久久久久YW| A片在线免费观看| 免费在线观看a级毛片| 国产一级黄片儿免费看| 免费一级毛片在线播放不收费| 国产高潮久久免费观看| 国产精品自在自线免费观看| 一级一片免费视频播放| 亚洲美女高清一区二区三区| 久久久国产精品无码免费专区| 亚洲午夜精品久久久久久浪潮| 日韩电影免费在线观看中文字幕| 亚洲国产系列一区二区三区| 2015日韩永久免费视频播放| 亚洲不卡中文字幕无码|