天天看點

java重寫和重載

方法的重載:

在一個類中的兩個或兩個以上的方法,他們方法名相同但是參數清單不同,這種方式稱為方法的重載,方法的重載是實作多态性的方式之一。

參數清單不同指的是參數的個數不同或相同的個數但順序不同或者類型不同,方法重載時傳回值類型可以不同,但是僅僅是傳回值類型不同的話不可以。

java在調用方法的時候,如果精确比對沒有對應的方法,會自動轉換比對相應的方法,例如,如果沒有int類型的參數,但是有一個double類型的參數的同名方法,在調用該方法時如果傳入int類型的參數,則不會報錯,而是把int自動轉換成double類型比對double類型參數的方法。但是,這種情況也隻是在精确比對無法比對的情況下才會發生,如果存在int類型參數的此方法,傳int類型參數時則不會調用double類型的。

重載的價值在于它允許相關的方法用同一個名字來通路,沒有什麼規定要求重載的方法之間必須有關系,但是實際上如果真的是沒有任何關系的方法就不應該用重載實作,而是應該用新的方法,否則的話就違背了重載的初衷。

普通方法可以重載,構造方法也一樣可以重載。不管是普通方法還是構造方法,裡邊傳遞的參數都是既可以是簡單類型也可以是對象。簡單類型直接傳值,而對象傳遞的則是引用。

重載遵循“編譯期綁定”,即在編譯時根據參數确定調用哪一個方法。

方法的重寫:

在子類繼承父類的時候,子類中與父類方法名和參數清單完全一樣,但是其他地方有不同,這種方式叫做重寫。重寫隻發生在繼承的時候,如果一個類不能被繼承,則也不能被重寫。方法的重寫也稱為方法的覆寫。

重寫遵循兩同兩小一大的原則,即:方法名相同,參數清單相同;子類抛出的異常要小于或等于父類抛出的異常,并且不能抛出父類沒有的異常,子類的傳回值類型要小于或等于父類的傳回值類型;子類的通路權限要大于或等于父類的通路權限。

除開上述原則之外,還要知道的是被辨別為final的方法不能被重寫,不能被繼承的方法不能被重寫,例如private修飾的方法。

被子類對象重寫過的方法,在程式運作時,根據對象的類型不同(而不是引用類型的不同)來決定調用哪個版本的方法,等号之前的是引用類型,new之後的是對象類型。

重寫遵循“運作時綁定”,即在運作的時候根據引用指向的實際對象類型來決定調用的方法版本。

下一篇: java遞歸