编程语言
首页 > 编程语言> > java – 在编译时解析静态方法

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