Java 中方法過載和方法覆蓋的區別


Java 中的方法過載

當一個類有兩個或多個同名但引數不同的方法時,在呼叫時,根據傳遞的引數呼叫相應的方法(或相應的函式體將動態地繫結到呼叫行)。這種機制稱為方法過載。

方法過載的示例

如果您觀察下面的示例,我們在這裡建立了一個名為 Sample 的類,該類有兩個同名 (add) 且返回型別相同的方法,唯一的區別是它們接受的引數(一個方法接受兩個整型變數,另一個接受三個整型變數)。

當您呼叫 add() 方法時,根據您傳遞的引數,相應的方法體將被執行。

public class Sample {
   public static void add(int a, int b) {
      System.out.println(a+b);
   }
   public static void add(int a, int b, int c) {
      System.out.println(a+b+c);
   }
   public static void main(String args[]) {
      Sample obj = new Sample();
      obj.add(20, 40);
      obj.add(40, 50, 60);
   }
}

輸出

執行後,將產生以下輸出:

60
150

Java 中的方法覆蓋

在方法覆蓋中,超類和子類具有相同名稱(包括引數)的方法。JVM 根據用於呼叫方法的物件呼叫相應的方法。在覆蓋中,返回型別也應該相同。

方法覆蓋的示例

讓我們舉一個例子來理解 Java 中的方法覆蓋是如何工作的:

class SuperClass {
    public static void sample() {
        System.out.println("Method of the super class");
    }
}
public class SubClass extends SuperClass {
    public static void sample() {
        System.out.println("Method of the sub class");
    }
    public static void main(String args[]) {
        SuperClass obj1 = new SubClass();
        SubClass obj2 = new SubClass();
        obj1.sample();
        obj2.sample();
    }
}

這裡我們有一個超類和一個子類。這兩個類都有一個名為 Sample() 的方法,其簽名相同。在主類中,我們為超類建立了 obj1,為子類建立了 obj2。JVM 根據用於呼叫方法的物件呼叫相應的方法。

輸出

執行後,將產生以下輸出:

Method of the super class
Method of the sub class

過載和覆蓋的區別

下表突出了方法過載和方法覆蓋的主要區別:

方法過載

方法覆蓋

方法過載被稱為編譯時多型。

方法覆蓋被稱為 執行時多型

為了使過載發揮作用,必須至少有兩個同名的方法。

為了使覆蓋工作,我們需要在父類和子類中至少有一個同名的方法。

這些方法必須具有不同的引數數量。如果兩個方法的引數數量相同,則它們的型別必須不同。

這兩個方法必須具有相同數量和型別的引數。

結論

過載和覆蓋是 面向物件程式設計 中的概念,用於提高程式的可讀性和可重用性。方法過載是一種靜態 多型。在方法過載中,我們可以定義多個同名但引數不同的方法。

方法覆蓋是一種實現多型的機制,其中超類和子類具有相同的方法,包括引數和簽名。 JVM 根據用於呼叫方法的物件呼叫相應的方法。

更新於: 2023-09-13

34K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.