在物件導向程式設計(Object-Oriented Programming, OOP)中,多型機制無疑是其最具特色的功能,甚至可以說,不運用多態的程式設計不能稱之為OOP。
本質上多態分兩種:
編譯時多態(又稱靜態多態),執行時期多型(又稱動態多型) (建議學習:java課程)
重載(overload)是編譯時多態的例子,編譯時多態在編譯時就已經確定,運行時運行的時候呼叫的是確定的方法。
我們通常所說的多態指的都是運行時多態,也就是編譯時不確定究竟呼叫哪個具體方法,一直延遲到執行時才能確定。這也是為什麼有時候多型方法又被稱為延遲方法的原因。
以下簡單介紹一下運行時多態(以下簡稱多型)的機制。
多態通常有兩種實作方法:
子類別繼承父類別(extends)
類別實作介面(implements)
無論是哪一種方法,其核心之處就在於對父類別方法的改寫或對介面方法的實現,以獲得在執行時不同的執行效果。
要使用多態,在宣告物件時就應該遵循一條法則:宣告的總是父類別類型或介面類型,建立的是實際類型。舉例來說,假設我們要建立一個ArrayList對象,宣告就應該採用這樣的語句:
List list=newArrayList();
而不是
ArrayList list=newArrayList();
在定義方法參數時也通常總是應該優先使用父類類型或介面類型,例如某方法應該寫成:
publicvoid doSomething(List list);
而不是
publicvoid doSomething(ArrayList list);
這樣宣告最大的好處在於結構的靈活性:假如某一天我認為ArrayList的特性無法滿足我的要求,我希望能夠用LinkedList來取代它,那麼只需要在物件建立的地方把new ArrayList()改為new LinkedList即可,它程式碼一概不用改動。
以上是java多態是如何實現的的詳細內容。更多資訊請關注PHP中文網其他相關文章!