This Википедии гласит:Политизм подтипов: всегда поздняя привязка?
Поскольку конкретный тип полиморфного объекта не известен до выполнения (в целом), то выполняется функция динамически связаны. Возьмем, к примеру, следующий Java-код:
public void foo(java.util.List<String> list) { list.add("bar"); }
Список представляет собой интерфейс, так что список должен относиться к подтипу ней. Является ли ссылка ссылкой на LinkedList, ArrayList или какой-либо другой подтип ? Фактический метод, на который ссылается add, неизвестен до выполнения.
Рассмотрим следующий пример:
List<String> list;
list = new LinkedList<String>();
foo(list);
list = new ArrayList<String>();
foo(list);
Почему не фактический метод ссылки здесь не знаю, до выполнения? Не удалось ли компилятору проверить каждый вызов foo, из которого вводится объект list? Конечно, это возможно только в том случае, если программа детерминирована и не задействована случайность (например, взаимодействие с пользователем).
Это что-то (в общем) в цитируемом заявлении о том или о чем я не понимаю?
В специальном случае, когда программа детерминирована, используется статическое связывание или есть - в Java - всегда используется динамическое связывание, независимо от того, что возможно? Если да, то почему?
Это * может *, но это было бы очень много работы, чтобы получить не большую выгоду. –
@OliverCharlesworth, выигрыш большой и превосходит массу работы, и на самом деле это делает это! –