Java中靜態方法能否被重寫


  在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫(Override)。方法重寫又稱方法覆蓋。

public class Test {
    public static void main(String[] args) {
        /**
        * 結論:
        * 靜態方法可以被繼承,但是不能被覆蓋,即不能重寫。
        * */
        Son.staticMethod(); // 運行結果:Father staticMethod
    }
}

class Father {
    public static void staticMethod() {
        System.out.println("Father staticMethod");
    }
}

class Son extends Father {
}
public class Test {
    public static void main(String[] args) {
        Father.staticMethod(); // 運行結果:Father staticMethod
        /**
         * 結論:
         * 類執行了自己申明的靜態方法。
         * 該子類實際上只是將父類中的同名靜態方法進行了隱藏,而非重寫。
         * */
        Son.staticMethod(); // 運行結果:Son staticMethod
        Father father = new Son();
        /**
         * 結論:
         * 父類引用指向子類對象時,只會調用父類的靜態方法。
         * 父類和子類中含有的其實是兩個沒有關系的方法,它們的行為也並不具有多態性。
         * */
        father.staticMethod(); // 運行結果:Father staticMethod
    }
}

class Father {
    public static void staticMethod() {
        System.out.println("Father staticMethod");
    }
}

class Son extends Father {
    public static void staticMethod() {
        System.out.println("Son staticMethod");
    }
}

總結:

  1. 在Java中靜態方法可以被繼承,但是不能被覆蓋,即不能重寫。
  2. 如果子類中也含有一個返回類型、方法名、參數列表均與之相同的靜態方法,那么該子類實際上只是將父類中的該同名方法進行了隱藏,而非重寫。
  3. 父類引用指向子類對象時,只會調用父類的靜態方法。所以,它們的行為也並不具有多態性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM