繼承和靜態方法

在 Java 中,父類和子類都可以具有相同名稱的靜態方法。但是在這種情況下,子程序中靜態方法的實現隱藏了父類的實現,它不是方法重寫。例如:

class StaticMethodTest {

  // static method and inheritance
  public static void main(String[] args) {
    Parent p = new Child();
    p.staticMethod(); // prints Inside Parent
    ((Child) p).staticMethod(); // prints Inside Child
  }

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

  static class Child extends Parent {
    public static void staticMethod() {
      System.out.println("Inside Child");
    }
  }
}

靜態方法繫結到類而不是例項,並且此方法繫結在編譯時發生。因為在第一次呼叫 staticMethod() 時,使用了父類引用 p,所以呼叫 ParentstaticMethod() 版本。在第二種情況下,我們確實把 p 投入了 Child 類,ChildstaticMethod() 被執行了。