Я понимаю, как работает динамическое связывание, а также разница между статическим и динамическим связыванием. У меня просто возникают проблемы с переносом моего мозга вокруг определения динамической привязки. В принципе, это не тип привязки во время выполнения.Понимание динамического связывания
ответ
В принципе, динамическое связывание означает, что адрес для вызова функции не закодирован в сегмент кода вашей программы, когда он переведен на язык ассемблера и вместо этого получается из другого места, то есть переменные стека, поиск массивов и т. Д. .
на более высоком уровне, если у вас есть строка кода:
foo(bar) //Calls a funciton
Если это может быть известно во время компиляции точно, какие функции это будет вызывать, это статическое связывание. Если foo может означать несколько функций в зависимости от вещей, которые невозможно узнать во время компиляции, это динамическое связывание.
Я понимаю, что это проявляется в полиморфизме. Обычно при создании нескольких классов, полученных из базового класса. Если каждый из производных классов содержит функцию, которую каждый использует. Базовый класс может использоваться для выполнения функции производных классов, и он будет правильно вызывать правильную функцию.
Например:
class Animal
{
void talk();
}
class Dog extends Animal
{
public void talk() { System.out.println("woof"); }
}
class Cat extends Animal
{
public void talk() { System.out.println("meow"); }
}
....
Animal zoo[2];
zoo[0] = new Dog();
zoo[1] = new Cat();
for(Animal animalToggle: zoo)
{
animalToggle.talk();
}
напечатает: гав мяу
Моя интерпретация, надеюсь, что это помогает.
Вы говорите об динамической привязке, а не о динамической компоновке? – 2008-11-02 23:25:03