【问题标题】:Understanding Dynamic Binding了解动态绑定
【发布时间】:2010-09-20 10:14:54
【问题描述】:

我了解动态绑定的实现方式以及静态绑定和动态绑定之间的区别,但我只是在思考动态绑定的定义时遇到了麻烦。基本上除了它是一个运行时绑定类型。

【问题讨论】:

  • 你说的是动态绑定而不是动态链接?

标签: binding computer-science


【解决方案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();
}

将打印: 纬 喵喵

我的解释希望它有所帮助。

【讨论】:

    【解决方案2】:

    基本上,动态绑定意味着函数调用的地址在翻译成汇编语言时不会硬编码到程序的代码段中,而是从其他地方获取,即堆栈变量、数组查找等。

    在更高的层次上,如果你有一行代码:

    foo(bar) //Calls a funciton
    

    如果可以在编译时准确知道这将调用什么函数,这就是静态绑定。如果 foo 可能意味着多个函数,具体取决于编译时不可知的事物,那么这就是动态绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      相关资源
      最近更新 更多