为什么在重写超类方法时会调用该方法?(来自OCA实践测试)

Ric*_*ick 3 java static overriding method-hiding

这些OCA练习题(pdf)中的问题3 :

abstract class Writer {
   public static void write() {
      System.out.println("Writing...");
   }
}

class Author extends Writer {
   public static void write() {
      System.out.println("Writing book");
   }
}

public class Programmer extends Writer {
   public static void write() {
      System.out.println("Writing code");
   }
   public static void main(String[] args) {
      Writer w = new Programmer();
      w.write();
   }
}
Run Code Online (Sandbox Code Playgroud)

输出为Writing...

我不明白为什么。作为Programmer重写Writer的write方法,我认为它应该在中Programmer而不是在中调用该方法Writer

为什么?

Sur*_*tta 5

您必须在这里了解两点。

对于static成员,没有压倒一切的概念。它们是简单的,static并且永远不会根据实例进行更改。

static成员绑定到类,而不是实例。因此,无论实例是什么,它们都将查找被调用并执行的类型。