Почему раннее связывание разрешается во время компиляции, если фактический объект определяется во время выполнения?

Я знаю, что все объекты создаются во время выполнения при вызове функции.

Связывание - это когда мы связываем члены-члены методов внутри класса.

раннее связывание связывает все переменные экземпляра метода во время компиляции. Я думал, что все объекты создаются во время выполнения, поэтому он должен также связывать все элементы данных методов во время выполнения.

Почему при ранней привязке вызов метода объекта определяется во время компиляции? если этот объект создан во время выполнения.

например.

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

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

foo () была разрешена во время компиляции, но экземпляр определяется во время выполнения.

1 ответ

Это связано с тем, что привязка вызова означает определение метода (или функции), который должен быть вызван, а не определение экземпляра для вызова.

Раннее связывание предпочтительнее, потому что тогда вызов выполняется немного быстрее.

Единственной причиной задержки привязки к среде исполнения может быть полиморфизм, когда даже точный тип объекта неизвестен при типе компиляции; или простая реализация компилятора, которая не заботится о стоимости поиска VMT.

Другие вопросы по тегам