<1>多型的產生:
在繼承關係下,把子類物件賦給父類物件。
<2>什麼是多型:
物件可以有多種形態。
animal a=null;
a=new dog();
a=new cat();
此時的變數a有兩種型別:
編譯型別:宣告物件變數的型別,animal,表示把物件看做什麼型別。
執行型別:物件的真實型別,dog()——>物件的真實型別。
編譯型別必須是執行型別的父類或相同
當編譯型別和執行型別不同時,多型就出現了。
<3>多型的前提:
可以是繼承關係(類和類),也可以是實現關係(介面和實現類),在開發中多型一般都指第二種。
<4>多型的特點:
在執行時期會表現出具體的子類特徵(呼叫子類的方法)。
<5>多型的作用:
遮蔽不同子類物件之間的實現差異,從而寫出通用**達到通用程式設計,以適應需求的不斷變化。
多型時方法呼叫問題
前提:必須存在多型情況。
存在父類:surperclass;存在子類:subclass;方法:dowork;
————————
測試**:
surperclass s=new subclass();//多型
s.dowork();//???執行結果是什麼
情況一:dowork方法存在於surperclass中,不存在subclass中
//父類
class
surperclass
//子類
class
subclass
extends
surperclass
此時執行的結果:編譯通過,執行surperclass中的dowork方法。
順序:先從subclass中找dowork方法,找不到,再去父類中查詢。
情況二:dowork方法存在於surperclass和subclass中
//父類
class
surperclass
//子類
class
subclass
extends
surperclass
}此時執行的結果:編譯錯誤;
順序:編譯時期:在編譯型別(surperclass)中找有無dowork方法,找到,編譯通過;找不到,編譯錯誤。
情況三:dowork方法存在於surperclass和subclass中
//父類
class
surperclass
}//子類
class
subclass
extends
surperclass
}此時執行的結果:編譯通過;執行subclass中的dowork方法。
順序:在執行期間,呼叫執行型別(subclass)中的方法。
情況四:dowork方法存在於surperclass和subclass中,但dowork方法是靜態方法。
此時這種情況我們稱為隱藏,而不叫方法覆蓋.
//父類
class
surperclass
}//子類
class
subclass
extends
surperclass
}此時執行的結果:編譯通過;執行surperclass中的dowork方法。
靜態方法的呼叫只需要類即可。
如果使用物件進行呼叫靜態方法,其實使用的是物件的編譯型別來呼叫靜態方法。和物件無關。
java三大特性 多型(1)
定義 物件具有多種形態 型別traffictool traffictool new traffictool 父類的引用指向本身類物件 traffictool traffictool1 new bmw 父類引用指向子類物件 建立本類物件時,呼叫的方法為本類方法。建立子類物件時,呼叫的方法為子類繼承的或...
java三大特性之多型
多型 多型的概述 1 多型 事物的多種狀態,polymorphic 物件的多型性 同乙個物件,可能具有不同的名稱,同乙個物件,有不同的型別的引用指向它。本質 同乙個物體有不同的名稱和描述。型別的多型性 同乙個型別,可能具有不同的子類實現。同乙個型別引用,有不同的物件實現。本質 同乙個名字和描述,可以...
Java三大特性 封裝,繼承,多型
封裝的作用 1 封裝能夠減少耦合 2 類內部結構可以自由修改 3 對成員變數進行更精確的控制 例項 public class person在上面這段 中,把屬性定義成private私有的,只能在本類中訪問,其他類訪問不了。public class person public string getna...