方法過載與方法覆寫的概念與區別
阿新 • • 發佈:2019-01-06
Java中有兩個很重要的概念,分別是方法過載和方法覆寫
先分別介紹這兩個概念,再統一分析它們的差別
1. 方法過載
可以說,方法過載是Java語言的一大特點與優點,在C語言中,不允許擁有兩個同名的函式,這給我們帶來很大不便,而在Java中,支援多個方法可以同名(合法要求下),這讓使用者端得到很大便利,呼叫一個名字則可以使用多種不同引數的方法;
下面看一個方法過載的例子:
public class Exer1 { public static void main(String[] args) { System.out.println(add(2, 4)); System.out.println(add(2.0, 4.0)); } public static int add(int x, int y) { return x + y; } public static double add(double x,double y) { return x + y; } }
從這段程式碼可以看到,有了方法過載,可以接受不同型別的引數,返回不同型別的值,在C語言中,必須實現兩個函式才能實現;
方法過載定義:
- 方法名相同
- 引數的型別、順序或個數不同(引數列表不同)
- 與返回值型別無關
2.方法覆寫
方法覆寫在Java中顯得尤為重要。這與繼承有著密切的關聯;
在Java中,方法覆寫一定發生在繼承關係中,若在同一個類中,這不叫方法覆寫,也會報錯
下面看一段程式碼:
class Person { private String name; public void fun() { System.out.println("father"); } } class Student extends Person { private String school; public void fun() { System.out.println("son"); } } public class Exer1 { public static void main(String[] args) { Student stu = new Student(); stu.fun(); } }
在這段程式碼中,執行的結果是:son
在main方法中,我們記住,是誰new的這個物件,則呼叫誰的方法;
方法覆寫定義:
- 與父類方法名稱、引數型別及個數完全相同
- 覆寫方法不能擁有比父類更為嚴格的訪問控制權限(public>default>private)
- 若父類方法由private修飾,則此方法不能夠方法覆寫(private代表只能在本類中可見,則子類根本不知道父類有這樣一個方法,則不能覆寫)
除了方法覆寫,還有屬性覆蓋這一概念,但實際意義不大,因為屬性一般都用private封裝,這裡我們不深入瞭解
3.方法過載與方法覆寫的區別⭐
前面分別詳細介紹了,這裡我直接歸納:
區別 | 過載 | 覆寫 |
---|---|---|
概念 | 方法名稱相同、引數的型別及個數不同 | 方法名稱、返回值型別、引數的型別及個數完全相同 |
範圍 | 一個類 | 繼承關係 |
限制 | 沒有許可權要求 | 被覆寫的方法不能擁有比父類更嚴格的訪問控制權限 |