2

这是伪代码

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

4

1 回答 1

1

方法static属于 aclass而不是 的实例class。出于这个原因,对static方法的调用总是使用引用类型而不是实例类型来解决。

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

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

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

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

于 2017-10-29T06:47:49.280 回答