Страницы

Поиск по вопросам

четверг, 12 декабря 2019 г.

Объясните наглядно разницу раннего и позднего связывания методов.

#java


Позднее связывание методов это когда имеется ссылочная переменная, и в зависимости
от того экземпляр какого класса будет создан, и будет вызван соответствующий метод.
А как насчет раннего связывания в чем отличие?    


Ответы

Ответ 1



Раннее связывание - это когда метод, который будет вызван, известен во время компиляции, например, вызов статического метода. Кстати, то что вы называете поздним связываением, есть скорее dynamic dispatch. Позднее связывание - это когда вызов метода может быть осуществлен только во время выполнения и у компилятора нет информации, чтобы проверить корректность такого вызова. В java это можно сделать при помощи рефлексии.

Ответ 2



Раннее связывание, как было отмечено выше, происходит на этапе компиляции. Оно применяется при вызове обычных методов (не виртуальных). Позднее связывание напротив происходит во время выполнения. Выполняется оно при вызове виртуальных функций класса-потомка для определения того, какой именно метод следует вызывать. Исходя из того, что раннее связывание выполняется на этапе компиляции, а позднее - в рантайме, первый вариант обладает лучшим быстродействием, однако второй необходим для реализации полиморфизма. По поводу Java могу сказать, что там, если не ошибаюсь, ко всем методам по умолчанию применяется позднее связывание (если они не помечены модификатором final) в отличие от, скажем, С++, где по умолчанию применяется раннее связывание. Еще для большего понимания вопроса почитайте про таблицу виртуальных методов З.Ы. с Java близко не знаком, поэтому точно не могу сказать, насколько там применим термин "функция"

Комментариев нет:

Отправить комментарий