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。
为什么?
您必须在这里了解两点。
对于static成员,没有压倒一切的概念。它们是简单的,static并且永远不会根据实例进行更改。
而static成员绑定到类,而不是实例。因此,无论实例是什么,它们都将查找被调用并执行的类型。