【发布时间】:2019-11-20 03:57:10
【问题描述】:
假设我有以下课程:
public class MyClass {
public void doSomething() {
System.out.println("doing something.");
}
}
让我们进一步假设,我的项目所做的只是调用 .something() 方法。没有压倒一切或任何其他有趣的事情发生。
MyClass myObj = new MyClass();
myObj.doSomething();
javac 编译器是否注意到此方法调用没有被覆盖,并优化绑定到“早期绑定”?我是出于好奇而问的;在任何现实世界的应用程序中,我当然会在我的代码中添加final、static 和private。
【问题讨论】:
-
答案当然取决于您使用的哪个编译器...但是编译器不需要这样做才能被视为Java编译器,而我的机器上没有。
-
如果您使用
class loader加载runtime的类并扩展MyClass并覆盖doSomething(),会发生什么?
标签: java late-binding early-binding