重寫(override)
從字面上看,重寫就是 重新寫一遍的意思。其實就是在子類中把父類本身有的方法重新寫一遍。子類繼承了父類原有的方法,但有時子類並不想原封不動的繼承父類中的某個方法,所以在方法名,引數列表,返回型別(除過子類中方法的返回值是父類中方法返回值的子類時)都相同的情況下, 對方法體進行修改或重寫,這就是重寫。但要注意子類函式的訪問修飾許可權不能少於父類的。
public
class
father
public
void
sayhello()
}class
sonextends
father
}
總結:
發生在父類與子類之間
方法名,引數列表,返回型別(除過子類中方法的返回型別是父類中返回型別的子類)必須相同
訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)
重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常
過載(overload)
在乙個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同甚至是引數順序不同)則視為過載。同時,過載對返回型別沒有要求,可以相同也可以不同,但不能通過返回型別是否相同來判斷過載。理由:int f()和void f( ),main方法中呼叫f(),你說他是呼叫了誰?
public
class
father
public
void
sayhello()
public
void
sayhello
(string name)
}
總結:
過載overload是乙個類中多型性的一種表現
過載要求同名方法的引數列表不同(引數型別,引數個數甚至是引數順序)
過載的時候,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準 區別
方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。過載發生在乙個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的引數列表,有相容的返回型別,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常(黎克特制代換原則)。過載對返回型別沒有特殊的要求,不能根據返回型別進行區分。
java中關於過載和重寫的理解
重寫 覆蓋 overwrite 是發生在子類和父類之間的,子類重寫父類的方法。規則 方法名字,方法的引數 引數的個數,型別,順序 返回型別必須一樣,異常不能被擴大,可見性不能縮小。重寫方法只能存在於具有繼承關係中,重寫方法只能重寫父類非私有的方法。子類可以和父類用相同名字的靜態方法,方法名,引數型別...
過載 重寫和虛函式的理解
過載的作用是 在實際操作過程中經常遇到函式功能相同,但是輸入引數的個數,順序或者型別不同,遇到這種情況,最笨的方法是再命名函式,從而汙染了命名空間。c 可以通過過載來解決這一問題,仍然使用同一函式名,但輸入引數個數,型別或者順序不同,例如示例的 int func int a,int b 與doubl...
過載和重寫
物件導向的三大特性 繼承 封裝 多型。過載和重寫是多型的兩種表現形式。過載和重寫又有什麼區別呢?1 層次不同 重寫 發生在父類和子類之間。是子類重寫父類的方法,具有相同的方法名和方法引數。比如說,父子兩人都去吃飯 相同的方法 吃的是麵條 引數 父親飯量大,吃兩碗,兒子飯量小,就能吃一碗 實現了吃飯的...