【问题标题】:Why static methods of Parent Class gets hidden in Child Class?为什么父类的静态方法隐藏在子类中?
【发布时间】:2017-10-29 06:22:35
【问题描述】:

这是伪代码

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

【问题讨论】:

标签: java inheritance static polymorphism method-hiding


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多