Java 中可以過載或覆蓋靜態方法嗎?


如果一個類有多個名稱相同但引數不同的函式,則稱為方法過載。如果子類提供了其父類已提供的某個方法的具體實現,則稱為方法覆蓋。

方法過載提高了程式的可讀性。方法覆蓋提供了其超類引數在過載的情況下必須不同,在覆蓋的情況下必須相同的方法的具體實現。

現在考慮靜態方法的情況,那麼靜態方法在過載和覆蓋方面有以下規則。

  • 可以透過另一個靜態方法過載。

  • 不能被子類中的另一個靜態方法覆蓋。其背後的原因是子類只隱藏了靜態方法,而不是覆蓋它。

示例

以下示例演示了這一點。

class SuperClass {
   public static void display() {
      System.out.println("SuperClass.display()");
   }

   //Method overloading of static method
   public static void display(int a) {
      System.out.println("SuperClass.display(int): " + a);
   }
}

class SubClass extends SuperClass {
   //Not method overriding but hiding
   public static void display() {
      System.out.println("SubClass.display()");
   }
}

public class Tester {
   public static void main(String[] args) {
      SuperClass object = new SubClass();

      //SuperClass display method is called
      //although object is of SubClass.
      object.display();        
      object.display(1);    
   }
}

輸出

SuperClass.display()
SuperClass.display(int): 1

注意

  • 靜態方法在編譯時解析,不能被子類覆蓋。例項方法在執行時解析,可以被覆蓋。

  • 靜態方法可以過載。

更新於: 2023-12-01

4K+ 瀏覽量

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告