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

4
这是伪代码。
class A
{
  public static void m1()
  {
    System.out.println("Parent");
  }
}

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

这段代码编译成功了。加上 @Override 注解会导致编译错误。因此,请解释一下方法隐藏的概念。 父类的静态方法会被子类继承吗?


3
静态方法属于一个类。它们可以被继承,但不能被重写。 - Chetan Kinger
请解释这个概念。 - Raju Parashar
1
阅读此链接:https://docs.oracle.com/javase/tutorial/java/IandI/override.html - Rohan
1个回答

2
一个 static 方法属于一个类而不是类的实例。因此,对 static 方法的调用始终使用引用类型而不是实例类型来解析。
运行时多态性仅适用于实例方法。因此,在示例程序中对 m1 的这两个调用都将导致调用来自 Am1
A aReferenece = new B(); 
A.m1();  
aReference.m1();

由于实例类型在决定调用哪个方法时没有任何作用,因此能够重写static方法是没有意义的,因为方法调用在编译时就已经解析了。

尽管如此,static方法仍然可以被继承并且被子类重新定义/隐藏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接