Понимание динамического связывания
-
05-07-2019 - |
Вопрос
Я понимаю, как работает реализация динамического связывания, а также разницу между статическим и динамическим связыванием. У меня просто возникают проблемы с определением динамического связывания. По сути, это тип привязки во время выполнения.
Решение
По сути, динамическое связывание означает, что адрес для вызова функции не жестко запрограммирован в сегмент кода вашей программы при переводе на ассемблер, а вместо этого получен из другого места, т. е. переменных стека, поиска в массиве и т. д. р>
На более высоком уровне, если у вас есть строка кода:
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();
}
напечатает: гав мяу р>
Моя интерпретация, надеюсь, поможет.