java的重寫與過載
1、過載(Overloading)
方法的過載一定只是引數的型別或個數不同,而方法的返回值相同
可以用相同的方法名但不同的引數列表來定義方法(引數表中引數的數量、型別或次序有差異)的過載。
兩個規則適用於過載方法:
1)呼叫語句的引數表必須有足夠的不同,以至於允許區分出正確的方法被呼叫。正常的拓展晉升(如單精度型別float到雙精度型別double)可能被應用,但是這樣會導致在某些條件下的混淆
2)方法的返回型別可以各不相同,但它不足以使返回型別變成唯一的差異。過載方法的引數表必須不同。
對於this的任何呼叫,如果出現,在任何構造方法中必須是第一個語句
2、重寫(Overriding)
子類定義同名方法來覆蓋父類的方法,是多型技術的一個實現。當父類方法在子類中被覆蓋時,通常是子類版本呼叫父類版本,並做一些附加的工作。
注意事項:
1)不使用super而希望引用父類方法會導致無限的遞迴,因為子類方法實際上是在呼叫它自己
2)當通過父類引用呼叫一個方法時,java會正確地選擇與那個物件對應的類的覆蓋方法
3)方法覆蓋中,子類在重新定義父類已有的方法時,應保持與父類完全相同的方法宣告,即與父類完全相同的方法名,返回值和引數列表
4)子類可以新增欄位,也可以新增方法或者覆蓋父類中的方法,然而繼承不能去除父類中的任何欄位和方法。final類是不可以被繼承的,例如String類是final類故不可繼承。
3、發生在父類和子類之間的同名方法之間的方法覆蓋(重寫)要滿足以下規則:
1)兩個方法的返回值型別必須相同
2)兩個方法的引數型別、引數個數、引數順序必須相同
3)子類方法點的許可權必須不小於父類方法的許可權private<defalut<public
4)子類方法只能丟擲父類方法宣告丟擲的異常或異常子類
5)子類方法不能覆蓋父類宣告為final或者static的方法
6)子類方法必須覆蓋父類中宣告為abstract的方法
4、重寫與過載的區別
重寫和過載是java多型性的不同表現。
重寫是父類與子類之間多型性的一種表現,可以改變返回值的型別
過載是一個類中多型性的一種表現
1)首先過載和重寫他們所處的作用域範圍不同。過載是在同一個類中進行方法的定義,重寫是在父子類中進行方法的定義。
2)其次,他們的定義方式也不同。過載是方法名相同,引數列表不同。而重寫是方法名相同引數列表也相同。