區別:1、重載實作的是編譯時的多型性,而重寫實作的是執行時期的多型性。 2.重載發生在一個類別中,同名的方法的參數列表要不同;而重寫發生在子類別與父類別之間,重寫方法的重寫方法要相同。 3.重載方法的回傳類型可以修改,重寫方法不能。 4.重載方法的異常可以修改,重寫方法的異常可以減少或刪除,一定不能拋出新的或更廣的異常。 5.重載方法的存取可以修改,而重寫方法的存取一定不能做更嚴格的限制。
本教學操作環境:windows7系統、java8版、DELL G3電腦。
從字面上看,重寫就是 重新寫一遍的意思。其實就是在子類別中把父類別本身有的方法重新寫一遍。子類別繼承了父類別原有的方法,但有時子類別並不想原封不動的繼承父類別中的某個方法,所以在方法名,參數列表,返回類型(除過子類別中方法的回傳值是父類別中方法傳回值的子類別時)都相同的情況下, 對方法體進行修改或重寫,這就是重寫。但要注意子類別函數的存取修飾權限不能少於父類別的。
例如:
public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Son s = new Son(); s.sayHello(); } public void sayHello() { System.out.println("Hello"); } } class Son extends Father{ @Override public void sayHello() { // TODO Auto-generated method stub System.out.println("hello by "); } }
重寫總結:
1.發生在父類別與子類別之間
2.方法名,參數列表,返回類型(除過子類別中方法的返回類型是父類別中返回類型的子類別)必須相同
3.存取修飾符的限制一定大於被重寫方法的存取修飾符(public>protected>default>private)
4.重寫方法一定不能拋出新的檢查異常或比被重寫方法申明更廣泛的檢查類型例外
在一個類別中,同名的方法如果有不同的參數列表(參數類型不同、參數個數不同甚至是參數順序不同)則視為重載。同時,重載對返回類型沒有要求,可以相同也可以不同,但不能透過傳回類型是否相同來判斷重載。
例如:
public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Father s = new Father(); s.sayHello(); s.sayHello("wintershii"); } public void sayHello() { System.out.println("Hello"); } public void sayHello(String name) { System.out.println("Hello" + " " + name); } }
重載總結:
1.重載Overload是一個類別中多型性的一種表現
2.重載要求同名方法的參數列表不同(參數類型,參數個數甚至是參數順序)
3.重載的時候,返回值類型可以相同也可以不相同。無法以返回類型作為重載函數的區分標準
答案:方法的重載和重寫都是實現多態的方式,差別在於前者實現的是編譯時的多態性,而後者實現的是運行時的多態性。
重載發生在一個類別中,同名的方法如果有不同的參數列表(參數類型不同、參數個數不同或二者都不同)則視為重載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的參數列表,有兼容的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常(里氏代換原則)。
重載對傳回類型沒有特殊的要求,不能根據回傳類型進行區分。
區別點 | 重載方法 | #重寫方法 |
---|---|---|
參數清單 | 必須修改 | 一定不能修改 |
返回類型 | 可以修改 | 一定不能修改 |
異常 | 可以修改 | 可以可以減少或刪除,一定不能拋出新的或更廣的例外 |
訪問 | 可以修改 | 一定不能做更嚴格的限制(可以降低限制) |
總結
方法的重寫(Overriding)和重載(Overloading)是java多態性的不同表現,重寫是父類別與子類別之間多態性性的一種表現,重載可以理解成多態的具體表現。
(1)方法重載是一個類別中定義了多個方法名稱相同,而他們的參數的數量不同或數量相同而類型和次序不同,則稱為方法的重載(Overloading)。
(2)方法重寫是在子類別存在方法與父類別的方法的名字相同,而且參數的個數與型別一樣,傳回值也一樣的方法,就稱為重寫(Overriding)。
(3)方法重載是一個類別的多態性表現,而方法重寫是子類別與父類別的一種多態性表現。
更多程式設計相關知識,請造訪:程式設計教學! !
以上是java重載與重寫的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!