为什么父类的静态方法会隐藏在子类中?

时间:2017-10-29 06:22:36

标签: java inheritance static polymorphism method-hiding

这是伪代码

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中继承?

1 个答案:

答案 0 :(得分:1)

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

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

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

由于实例类型在决定调用哪个方法时没有任何角色,因此能够覆盖static方法没有意义,因为方法调用在编译时自行解决。

也就是说,static方法仍然可以继承,因此可以由子类重新定义/隐藏。