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 根據用於呼叫方法的物件呼叫相應的方法。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP