Java中覆蓋 重寫 過載詳解

2021-06-22 03:02:25 字數 2119 閱讀 2343

過載:通俗的講就是方法名必須一致,但方法中的引數的狀態不一致!

先來看乙個過載的例子:

public class overloadtest 

/*** 方法1

* @param a

* @param b

*/public static void add(int a, int b)

/*** 方法2

* @param a

* @param b

*/public static void add(float a, float b)

/*** 方法3

* @param a

* @param b

*/public static void add(int a, float b)

/*** 方法4

* @param a

* @param b

*/public static void add(float a, int b)

/*** 方法5

* @param a

* @param b

* @param c

*/public static void add(int a, int b,int c)

}

過載的條件:

1:在使用過載時引數樣式必須不同,如:不同的引數型別【如方法1方法2】,不同的引數個數【如方法1和方法5】,不同的引數順序【方法3和方法4】

2:可以過載父類的方法,但是要有訪問許可權,如果父類中方法的訪問許可權為private的話,那麼子類無法進行過載,就算是在子類中重寫定義的話,那也是乙個新的方法,達不到過載的效果。

3:方法的異常型別和數目對過載都不會造成任何影響。

4:方法的返回值型別和過載沒關係,如下圖,編譯會報錯:

從圖中可以看出,方法的返回值型別和過載沒有半毛錢關係!

覆蓋:首先要理解覆蓋和重寫是同乙個概念【子類方法覆蓋父類的方法,不就等同於子類把父類的方法重寫了一遍嘛】!

通過乙個示例來說明:

class animal

public void fly()

}class bird extends animal

@override

public void fly()

}

覆蓋(重寫)的注意事項:1:覆蓋的方法必須和被覆蓋的方法有完全一致的簽名即方法名要相同、引數型別要相同、引數順序要相同、引數個數要相同。

2:覆蓋的方法必須和被覆蓋方法的返回值必須一致。

3:覆蓋的方法丟擲的異常必須和被覆蓋方法丟擲的異常一致,或者是其子類。

4:不能覆蓋private訪問型別的方法,如程式中的run()方法即使子類中有一樣的方法,但他們之間也沒有半毛錢關係,那只是重新定義了乙個新的方法而已!

下面我們通過乙個案例來深入體會過載:

class b 

}class a extends b

}public class test

}

程式的輸出結果為:兩個都是10.0!原因很簡單:類a繼承了類b並且對b中的fun()方法進行類覆蓋(重寫),所以類a的物件在呼叫方法時只呼叫了a中的fun()方法!下面通過乙個示例來深入體會過載:

class b 

}class a extends b

}public class test

}

a.fun(10)的結果為20;a.fun(10.0)的結果為10.0!原因也很簡單:類a繼承了類b,但是並沒有對b中的fun()方法進行重寫(覆蓋),而是過載了類b中的fun()方法,所以在函式呼叫的時候,會尋在他們各自對應的引數進行匹配!【不要忘記,過載有繼承關係哦!】

Java中的方法過載和重寫(覆蓋)

一.方法過載 overload 方法過載的判定 同一類中,方法名相同,引數列表不同 引數個數不同,引數列表中對應位置引數型別不同 其他方法返回值 和訪問修飾符都隨意。public class overloadtest the first situation the number of param t...

c 中 過載,重寫,覆蓋

過載 作用域內,函式名相同,函式引數不同 重寫 父類的virtual成員函式,子類重寫了函式體 覆蓋 1.子類重寫父類函式後,將導致父類裡被重寫函式及其過載函式被覆蓋 2.子類成員函式與父類成員函式,構成過載時,將導致父類裡成員函式被覆蓋 class p virtual p virtual void...

重寫 覆蓋 過載 多型

這篇部落格很亂,關於過載 隱藏 覆蓋的相關知識,看另一篇部落格 參考部落格 其實多型和過載不是乙個層次上的問題,重寫 覆蓋 過載 隱藏常放在一起討論,多型是重寫 覆蓋 下的一種特殊情況,即基類的函式被virtual修飾了。1 多型和過載的區別 多型是基於對抽象方法的覆蓋來實現的,用統一的對外介面來完...