我理解动态绑定的实现如何工作以及静态和动态绑定之间的区别,我只是在围绕动态绑定的定义缠绕我的大脑时遇到了麻烦。基本上不是它是运行时绑定类型。
答案 0 :(得分:3)
基本上,动态绑定意味着函数调用的地址在转换为汇编语言时不会硬编码到程序的代码段中,而是从其他地方获取,即堆栈变量,数组查找等。
在更高级别,如果您有一行代码:
foo(bar) //Calls a funciton
如果在编译时可以确切地知道它将调用哪个函数,那么这就是静态绑定。如果foo可能意味着多个函数取决于编译时不可知的事情,那么这就是动态绑定。
答案 1 :(得分:1)
我理解它在多态性中很明显。通常在创建从基类派生的多个类时。如果每个派生类都包含每个使用的函数。基类可用于执行派生类的函数,并且可以正确调用正确的函数。
例如:
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();
}
将打印: 纬 喵
我的解释希望它有所帮助。