1. 程式人生 > >java的重寫與過載

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)其次,他們的定義方式也不同。過載是方法名相同,引數列表不同。而重寫是方法名相同引數列表也相同。