從方法重載和重寫來理解多態

19年1.19
內容主要:從方法重寫和重載淺淺的理解下java多態機制
方法重寫與重載的區別等等,已經有前人鋪好了路,走就好了.這裏只是分享下個人淺顯的見解.歡迎指正

多態的機制:
本質上多態分爲兩種:
1.編譯時多態(又稱靜態多態)
2.運行時多態(又稱動態多態)

1.編譯時多態
重載(Overloading)就是編譯時多態的一個例子,編譯時多態在編譯時就已經確定,運行時運行的時候調用的是確定的方法。

2.運行時多態
重寫(Overriding)
運行時多態分爲兩種:
1.子類繼承父類(extends)
2.類實現接口(implement)

無論是哪種方法,其核心之處就在於對父類方法的改寫或對接口方法的實現,以取得在運行時不同的執行效果。

要使用多態,在聲明對象時就應該遵循一條法則:聲明的總是父類類型或接口類型,創建的是實際類型。舉例來說,假設我們要創建一個ArrayList對象,聲明就應該採用這樣的語句:
List list =newArrayList();
而不是
ArrayList list =newArrayList();
在定義方法參數時也通常總是應該優先使用父類類型或接口類型,例如某方法應該寫成:
publicvoid doSomething(List list);
而不是
publicvoid doSomething(ArrayList list);
這樣聲明最大的好處在於結構的靈活性:假如某一天我認爲ArrayList的特性無法滿足我的要求,我希望能夠用LinkedList來代替它,那麼只需要在對象創建的地方把new ArrayList()改爲new LinkedList即可,其它代碼一概不用改動。

多態的用途:

在於對設計和架構的複用.更進一步來說,面向接口編程,而不是面向實現編程

多瞭解一些:
動態綁定具體的調用過程爲:

1.首先會找到被調用方法所屬類的全限定名

2.在此類的方法表中尋找被調用方法,如果找到,會將方法表中此方法的索引項記錄到常量池中(這個過程叫常量池解析),如果沒有,編譯失敗。

3.根據具體實例化的對象找到方法區中此對象的方法表,再找到方法表中的被調用方法,最後通過直接地址找到字節碼所在的內存空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章