Вопрос

Я понимаю, как работает реализация динамического связывания, а также разницу между статическим и динамическим связыванием. У меня просто возникают проблемы с определением динамического связывания. По сути, это тип привязки во время выполнения.

Это было полезно?

Решение

По сути, динамическое связывание означает, что адрес для вызова функции не жестко запрограммирован в сегмент кода вашей программы при переводе на ассемблер, а вместо этого получен из другого места, т. е. переменных стека, поиска в массиве и т. д.

На более высоком уровне, если у вас есть строка кода:

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();
}

напечатает: гав мяу

Моя интерпретация, надеюсь, поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top