为什么 Parent Class 的静态方法隐藏在 Child Class 中?

Why static methods of Parent Class gets hidden in Child Class?

这是伪代码

class A
{
  public static void m1()
  {
    System.out.println("Parent");
  }
}

class B extends A
{
  public static void m1()
  {
    System.out.println("Child");
  }
}

这段代码编译成功。使用@Override 注释会引发编译错误。所以请解释一下方法隐藏的概念。 Parent 静态方法是否在 Child 中继承?

static 方法属于 class 而不是 class 的实例。因此,对 static 方法的调用始终使用引用类型而不是实例类型来解析。

运行时多态性仅适用于实例方法。因此,示例程序中对 m1 的以下两个调用将导致从 A 调用 m1

A aReferenece = new B(); 
A.m1();  
aReference.m1();

由于实例类型在决定调用哪个方法方面没有任何作用,因此能够覆盖 static 方法是没有意义的,因为方法调用是在编译时本身解析的。

也就是说,static 方法仍然可以被继承,因此可以被子类 redefined/hidden 继承。