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

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);
????}

}

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

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();
????}
}這個時候的結(jié)果是:
black cat eat
這樣的結(jié)果是因為在執(zhí)行期發(fā)生了向下轉(zhuǎn)型,就是動態(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模式理論及學術(shù)概念-------------------?? visitor模式進一步
4,重載overloading和覆寫overriding哪個更早執(zhí)行--?? visitor幫助篇
雖然排列順序是1,2,3,4但是我個人建議的學習方式是2,1,3,4因為這個順序更方便一般人理解
#?re: 靜態(tài)分派,動態(tài)分派,多分派,單分派 -------------- visitor模式準備 2006-12-20 13:59
單分派:定義:根據(jù)一個宗量的類型進行方法的選擇
多分派:定義:根據(jù)多于一個宗量的類型對方法的選擇
宗量???
對應(yīng)的英文翻譯是什么???回復??更多評論??
#?re: 靜態(tài)分派,動態(tài)分派,多分派,單分派 -------------- visitor模式準備 2006-12-20 15:16
宗量大概的意思是方法的參數(shù)或方法的調(diào)用者
具體的英文確切翻譯不太清楚,下班后找找看
這一詞的來源是<<Java與模式>>一書,有些其它的講模式的書也使用過。??回復??更多評論??
#?re: 靜態(tài)分派,動態(tài)分派,多分派,單分派 -------------- visitor模式準備[未登錄] 2007-01-17 17:38
樓主,要把概念分清楚,否則會誤導很人,本來是做好事成了誤人子第;
多分派與多重分派是不一樣的概念,多分派是根據(jù)多與一個宗量的類型對方法進行選擇,而多重分派是一系列單分派組成的分派過程,可以分解成多個單分派的,而多分派是不能分解成多個單分派的.??回復??更多評論??
#?re: 靜態(tài)分派,動態(tài)分派,多分派,單分派 -------------- visitor模式準備[未登錄]2007-01-19 09:51
1,根據(jù)多于一個宗量的類型對方法的選擇
說明:多分派其實是一系列的單分派組成的,區(qū)別的地方就是這些單分派不能分割。
2,多分派與多重分派是不一樣的概念,多分派是根據(jù)多與一個宗量的類型對方法進行選擇,而多重分派是一系列單分派組成的分派過程,可以分解成多個單分派的,而多分派是不能分解成多個單分派的
1是我寫的,2是你寫的,沒看到有什么區(qū)別,
都是根據(jù)多于一個宗量的類型對方法的選擇
都是多分派是不能分解成多個單分派的
你強調(diào)多重分派的概念,在我看來那是多次單分派,所以我并沒有提出多重分派的概念。
謝謝你的熱心糾正錯誤,不過麻煩把錯誤明確對比出來。
??回復??更多評論??