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

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

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

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

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

Например.

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

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

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


person user1393669    schedule 15.05.2012    source источник
comment
Как может aInstance быть чем-то другим, кроме class A с таким кодом?   -  person Mat    schedule 15.05.2012
comment
Это вопрос Java, заданный с неправильными тегами. Ретегинг.   -  person iammilind    schedule 15.05.2012


Ответы (1)


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

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

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

person Jirka Hanika    schedule 15.05.2012