Java 如果实际对象是在运行时确定的,为什么早期绑定在编译时解决?

Java 如果实际对象是在运行时确定的,为什么早期绑定在编译时解决?,java,object,late-binding,early-binding,Java,Object,Late Binding,Early Binding,我知道调用函数时,所有对象都是在运行时创建的 绑定是指在类内绑定方法和数据成员 早期绑定是在编译时绑定所有方法实例变量。我认为所有对象都是在运行时创建的,所以它必须在运行时绑定所有方法数据成员 为什么在早期绑定中,对对象方法的调用是在编译时确定的?如果该对象是在运行时创建的 比如说 class A{ public void foo(){ //some code here } } public static void main(String[] args){

我知道调用函数时,所有对象都是在运行时创建的

绑定是指在类内绑定方法和数据成员

早期绑定是在编译时绑定所有方法实例变量。我认为所有对象都是在运行时创建的,所以它必须在运行时绑定所有方法数据成员

为什么在早期绑定中,对对象方法的调用是在编译时确定的?如果该对象是在运行时创建的

比如说

class A{
    public void foo(){
        //some code here
    }
}

public static void main(String[] args){
    A aInstance = new A();
    aInstance.foo();
}

foo()是在编译时解析的,但aInstance是在运行时确定的

这是因为绑定调用意味着确定要调用的方法(或函数),而不是确定要调用它的实例

早期绑定更可取,因为调用执行速度稍快


延迟绑定到运行时的唯一原因可能是多态性,在编译类型中甚至对象的确切类型都是未知的;或者是一个简单的编译器实现,它不关心VMT查找的成本。

使用该代码,除了
类a
之外,aInstance怎么可能是其他任何东西呢?这是一个用错误标记提出的Java问题。重新标记。