java – 在编译时解析静态方法
作者:互联网
Java编译器(几乎)总是在编译时解析静态方法,这是一个普遍的事实.例如:
public class Super {
static void someMethod() {
// Do something...
}
}
public class Derived extends Super {
// Some other methods, excluding someMethod
}
测试代码:
Derived derived = new Derived();
derived.someMethod();
这应该调用Super.someMethod(),对吗?它应该在编译时解决,以便javac生成invokestatic Super.someMethod,但我已经看到它生成了invokestatic Derived.someMethod.它为什么这样做?有没有办法以某种方式改变这种行为?
如果我错了,请纠正我.
解决方法:
让我们假设Super和Derived之间存在一个中间超类(称为Intermediate).
编译器生成Derived.someMethod的原因是您可能会重新编译Intermediate以插入someMethod的实现,这将影响Super的实现.
标签:java,inheritance,static-methods 来源: https://codeday.me/bug/20190831/1777148.html