1. 程式人生 > >方法過載與方法覆寫的概念與區別

方法過載與方法覆寫的概念與區別

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.方法過載與方法覆寫的區別⭐

前面分別詳細介紹了,這裡我直接歸納:

區別 過載 覆寫
概念 方法名稱相同、引數的型別及個數不同 方法名稱、返回值型別、引數的型別及個數完全相同
範圍 一個類 繼承關係
限制 沒有許可權要求 被覆寫的方法不能擁有比父類更嚴格的訪問控制權限