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语言规范的确切部分。 请帮忙。 🙂