Java學習資料-方法覆蓋、方法重載、多態與動態綁定

一、方法覆蓋函數

方法覆蓋就是子類定義一個和父類同名的方法來覆蓋父類的方法。當父類方法在某些子類中被覆蓋後,一般是子類調用父類,並作一些額外的其它工做。spa

使用方法覆蓋應注意下面一些事項:對象

        不使用super而但願引用父類方法會致使無限的遞歸,由於子類方法其實是在調用它本身。繼承

        當經過父類引用調用一個方法時,Java會正確地選擇與那個對象對應的類的覆蓋方法。對於父類提供的方法,子類能夠覆蓋它,但這不是必須的,即子類也可使用一個方法的父類版本。遞歸

        方法覆蓋中,子類在從新定義父類已有的方法時,應保持與父類徹底相同的方法頭聲明,即與父類徹底相同的方法名、返回l類型和參數列表。編譯器

        子類能夠添加字段,也能夠添加方法或者覆蓋父類中的方法。但繼承不能去除父類中的任何字段和方法。  it

二、方法重載編譯

方法重載是在本身的類內定義幾個方法名相同但參數列表不一樣的過程。與上面講的方法覆蓋不一樣,方法覆蓋是子類覆蓋父類的方法,而方法重載是在自身一個類內進行定義的方法,只是定義的這些方法名相同但參數列表不一樣。引用

既然在一個類中出現了相同的方法名,或許就有人問了,那程序在調用這些方法時是怎樣進行的。其實,當程序在調用這些方法時,編譯器是經過區分它們的參數列表來進行區分的。例如,如今有兩個重載的方法,有的方法參數列表有一個參數,而另一個有兩個參數,當程序調用這個方法時,編譯器會經過查找你要調用的方法裏面的參數個數來肯定你要調用哪一個方法。因此,若是在重載過程當中發現有兩個或兩個以上方法的參數列表一致,編譯器則會報錯,由於它不能區分你到底要哪一個方法。程序

Java中容許對任何方法重載。同時要注意,若是重載的兩個方法中兩個方法的名字和參數列表一致,但方法返回類型不同,這種狀況也會編譯出錯,由於這是不能區分重載方法的。

三、多態分爲兩種:

多態分爲編譯時的多態和運行時的多態。

編譯時的多態是經過函數重載或運算符的重載來實現的。而運行時的多態是經過繼承和虛函數來實現的,之因此稱爲運行時的多態是由於在程序執行以前,根據函數和參數還沒法肯定應該調用哪個函數,而必須在程序的執行過程當中,根據具體的執行狀況才能動態地肯定。

         調用一個對象方法的機制:

        編譯器檢查對象的聲明類型和方法名。

        編譯器接着檢查方法調用中的參數類型。若是編譯器不能找到任何同參數類型匹配的方法,或者有多個方法都匹配轉化後的參數類型,那麼編譯器會報告一條錯誤。如今編譯器知道了須要調用的方法的名字和參數類型。

        若是方法類型爲private、static、final或者是一個構造器,那麼編譯器也會準確地知道應該調用哪一個方法,這稱做靜態綁定。與此相反,靠隱式參數的實際類型來決定調用哪一個方法叫作動態綁定,這必須發生在運行時。

相關文章
相關標籤/搜索