靜態分派,動態分派,多分派,單分派 -------------- 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. } 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 這樣的結果是因為在執行期發生了向下轉型,就是動態分派了。