Примеры из реальной жизни:
Если вы строите свой проект с jdesktop 0.8, но поставляете с jdesktop 0.9, ваш код все равно будет использовать функции 0.9, потому что он использует преимущество позднего связывания, то есть код, который вашКодовые вызовы - это версия, загружаемая загрузчиком классов, независимо от версии, с которой он был скомпилирован.(Это в отличие от компоновщиков, которые встраивают версию вызываемого кода во время компиляции в приложение.)
Для размышления, допустим, вы пытаетесь настроить таргетинг на Java 1.5 и 1.6, но хотите использовать tabкомпоненты в 1.6, если они доступны, то вы проверите их наличие, используя отражение в классе JTabbedPane, чтобы найти метод setTabComponentAt
.В этом случае вы работаете с Java 1.5, которая вообще не имеет этих функций, поэтому вы не можете вызвать их напрямую, иначе компиляция не удастся.Однако, если в системе конечного пользователя вы работаете с 1.6 (здесь вступает в силу позднее связывание), вы можете использовать рефлексию для вызова методов, которых не было в 1.5.
Они связаны;многие виды использования рефлексии полагаются на позднее связывание, чтобы быть полезным, но это принципиально разные аспекты языка и его реализации.