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
注意
靜態方法在編譯時解析,不能被子類覆蓋。例項方法在執行時解析,可以被覆蓋。
靜態方法可以過載。
廣告