區別: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過載與重寫的區別是什麼的詳細內容,更多請關注TW511.COM其它相關文章!