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

时间:2012-05-15 07:23:00

标签: java object late-binding early-binding

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

绑定是指我们在类中绑定方法数据成员。

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

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

例如。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

早期绑定是首选,因为然后调用执行得稍快。

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