靜態(tài)分派,動態(tài)分派,多分派,單分派 -------------- visitor模式準備
一,靜態(tài)分派:1,定義:發(fā)生在編譯時期,分派根據(jù)靜態(tài)類型信息發(fā)生,重載就是靜態(tài)分派
2,什么是靜態(tài)類型:變量被聲明時的類型是靜態(tài)類型
什么是動態(tài)類型:變量所引用的對象的真實類型
3,有兩個類,BlackCat ,WhiteCat都繼承自Cat
如下調用







































feed cat
feed cat
這樣的結果是因為重載是靜態(tài)分派,在編譯器執(zhí)行的,取決于變量的聲明類型,因為wc ,bc都是Cat所以調用的都是feed(Cat cat)的函數(shù).
二,動態(tài)分派
1,定義:發(fā)生在運行期,動態(tài)分派,動態(tài)的置換掉某個方法。
還是上邊類似的例子:
























black cat eat
這樣的結果是因為在執(zhí)行期發(fā)生了向下轉型,就是動態(tài)分派了。
三,單分派:
1,定義:根據(jù)一個宗量的類型進行方法的選擇
四,多分派:
1,定義:根據(jù)多于一個宗量的類型對方法的選擇
2,說明:多分派其實是一系列的單分派組成的,區(qū)別的地方就是這些但分派不能分割。
3,C++ ,Java都是動態(tài)單分派,靜態(tài)多分派語言
多分派的語言有:CLOS Cecil
最后的部分:
看完本文,如果你對visitor模式有更多的興趣,想了解更多請看如下幾篇文章。
1,靜態(tài)分派,動態(tài)分派,多分派,單分派 -------------- visitor模式準備(本文)
2,訪問差異類型的集合類 ------------------------ visitor模式入門
3,visitor模式理論及學術概念------------------- visitor模式進一步
4,重載overloading和覆寫overriding哪個更早執(zhí)行-- visitor幫助篇
雖然排列順序是1,2,3,4但是我個人建議的學習方式是2,1,3,4因為這個順序更方便一般人理解
posted on 2006-12-20 01:08 dreamstone 閱讀(5785) 評論(4) 編輯 收藏 所屬分類: jdk相關 、設計模式