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

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

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

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

    靜態分派,動態分派,多分派,單分派 -------------- visitor模式準備

    一,靜態分派:
    1,定義:發生在編譯時期,分派根據靜態類型信息發生,重載就是靜態分派
    2,什么是靜態類型:變量被聲明時的類型是靜態類型
          什么是動態類型:變量所引用的對象的真實類型
    3,有兩個類,BlackCat ,WhiteCat都繼承自Cat
    如下調用
    class Cat{}
    class WhiteCat extends Cat{}
    class BlackCat extends Cat{}
    public class Person {
        
    public void feed(Cat cat){
            System.out.println(
    "feed cat");
        }

        
    public void feed(WhiteCat cat){
            System.out.println(
    "feed WhiteCat");
        }

        
    public void feed(BlackCat cat){
            System.out.println(
    "feed BlackCat");
        }

        
    public static void main(String[] args) {
            Cat wc 
    = new WhiteCat();
            Cat bc 
    = new BlackCat();
            Person p 
    = new Person();
            p.feed(wc);
            p.feed(bc);
        }


    }

    運行結果是:
    feed cat
    feed cat
    這樣的結果是因為重載是靜態分派,在編譯器執行的,取決于變量的聲明類型,因為wc ,bc都是Cat所以調用的都是feed(Cat cat)的函數.
    二,動態分派
    1,定義:發生在運行期,動態分派,動態的置換掉某個方法。
    還是上邊類似的例子:
    class Cat{
        
    public void eat(){
            System.out.println(
    "cat eat");
        }

    }

    public class BlackCat extends Cat{
        
    public void eat(){
            System.out.println(
    "black cat eat");
        }

        
    public static void main(String[] args){
            Cat cat 
    = new BlackCat();
            cat.eat();
        }

    }
    這個時候的結果是:
    black cat eat
    這樣的結果是因為在執行期發生了向下轉型,就是動態分派了。

    三,單分派:
    1,定義:根據一個宗量的類型進行方法的選擇
    四,多分派:
    1,定義:根據多于一個宗量的類型對方法的選擇
    2,說明:多分派其實是一系列的單分派組成的,區別的地方就是這些但分派不能分割。
    3,C++ ,Java都是動態單分派,靜態多分派語言
    多分派的語言有:CLOS  Cecil

    最后的部分:

    看完本文,如果你對visitor模式有更多的興趣,想了解更多請看如下幾篇文章。
    1,靜態分派,動態分派,多分派,單分派 --------------   visitor模式準備(本文)
    2,訪問差異類型的集合類 ------------------------   visitor模式入門
    3,visitor模式理論及學術概念-------------------   visitor模式進一步
    4,重載overloading和覆寫overriding哪個更早執行--   visitor幫助篇
    雖然排列順序是1,2,3,4但是我個人建議的學習方式是2,1,3,4因為這個順序更方便一般人理解

    posted on 2006-12-20 01:08 dreamstone 閱讀(5788) 評論(4)  編輯  收藏 所屬分類: jdk相關設計模式

    評論

    # re: 靜態分派,動態分派,多分派,單分派 -------------- visitor模式準備 2006-12-20 13:59 mu!!

    單分派:定義:根據一個宗量的類型進行方法的選擇
    多分派:定義:根據多于一個宗量的類型對方法的選擇

    宗量???

    對應的英文翻譯是什么?  回復  更多評論   

    # re: 靜態分派,動態分派,多分派,單分派 -------------- visitor模式準備 2006-12-20 15:16 dreamstone

    宗量大概的意思是方法的參數或方法的調用者
    具體的英文確切翻譯不太清楚,下班后找找看
    這一詞的來源是<<Java與模式>>一書,有些其它的講模式的書也使用過。  回復  更多評論   

    # re: 靜態分派,動態分派,多分派,單分派 -------------- visitor模式準備[未登錄] 2007-01-17 17:38 h

    樓主,要把概念分清楚,否則會誤導很人,本來是做好事成了誤人子第;
    多分派與多重分派是不一樣的概念,多分派是根據多與一個宗量的類型對方法進行選擇,而多重分派是一系列單分派組成的分派過程,可以分解成多個單分派的,而多分派是不能分解成多個單分派的.  回復  更多評論   

    # re: 靜態分派,動態分派,多分派,單分派 -------------- visitor模式準備[未登錄] 2007-01-19 09:51 dreamstone

    1,根據多于一個宗量的類型對方法的選擇
    說明:多分派其實是一系列的單分派組成的,區別的地方就是這些單分派不能分割。

    2,多分派與多重分派是不一樣的概念,多分派是根據多與一個宗量的類型對方法進行選擇,而多重分派是一系列單分派組成的分派過程,可以分解成多個單分派的,而多分派是不能分解成多個單分派的

    1是我寫的,2是你寫的,沒看到有什么區別,
    都是根據多于一個宗量的類型對方法的選擇
    都是多分派是不能分解成多個單分派的

    你強調多重分派的概念,在我看來那是多次單分派,所以我并沒有提出多重分派的概念。

    謝謝你的熱心糾正錯誤,不過麻煩把錯誤明確對比出來。

      回復  更多評論   

    主站蜘蛛池模板: 国产亚洲精品激情都市| 亚洲精品少妇30p| 四虎永久在线精品免费观看地址 | 久久精品国产精品亚洲艾| 免费无码看av的网站| 国产在线jyzzjyzz免费麻豆| a级黄色毛片免费播放视频| 一区二区三区精品高清视频免费在线播放 | 亚洲精品无码永久中文字幕| 四虎免费久久影院| 亚洲第一成年男人的天堂| 亚洲国产三级在线观看| 亚洲精品国产精品乱码不卡| 日本免费网站在线观看| 91精品国产免费久久国语麻豆| 亚洲日韩aⅴ在线视频| 1000部国产成人免费视频| a级毛片在线视频免费观看| 免费大片av手机看片高清| 亚洲精品无码久久久久APP | 亚洲一区二区三区无码中文字幕| 日韩免费一级毛片| 国产AV无码专区亚洲AVJULIA| jlzzjlzz亚洲乱熟在线播放| 91麻豆最新在线人成免费观看| 91在线手机精品免费观看| 99视频在线精品免费| 免费视频精品一区二区三区 | 午夜亚洲国产理论秋霞| 国产亚洲无线码一区二区| 久久精品国产亚洲AV果冻传媒| 亚洲国产成人精品无码区在线观看 | 国产成人yy免费视频| 最近最新的免费中文字幕| 看全色黄大色大片免费久久| 成人免费视频国产| 亚洲1234区乱码| 99re6热视频精品免费观看| 久久久久久99av无码免费网站| 天天看片天天爽_免费播放| 免费大片黄手机在线观看 |