Java中的静态方法是否始终在编译时解决?

Java中的静态方法是否始终在编译时解决?

几个引用:

“当编译器编译该类时,它在编译时决定为每个静态方法调用调用哪个精确方法(这与非静态方法调用有很大区别:要调用的确切方法仅在运行时决定)。 “

“只调用静态方法取决于调用它的编译时类型。”

是的,但是如果静态方法已被运行时删除,则将调用基类中的匹配方法(名称和签名必须与编译时的原始方法完全匹配,并且该方法必须可由JVM规范规则访问)。

为了澄清,请考虑调用代码:

Derived.fn(); 

以下称为代码:

 class Base { public static void fn() { System.err.println("Base"); } } class Derived extends Base { public static void fn() { System.err.println("Derived"); } } 

打印Derived

现在,我编译所有内容。 然后重新编译Derived更改为:

 class Derived extends Base { } 

打印Base

也许那时我重新编译只是Derived改为:

 class Derived { } 

引发错误。

简短回答: 是的

我无法找到Java语言规范的确切部分。 请帮忙。 🙂