代码之家  ›  专栏  ›  技术社区  ›  Collin Price

理解动态绑定

  •  3
  • Collin Price  · 技术社区  · 17 年前

    我了解动态绑定的实现方式以及静态绑定和动态绑定之间的区别,我只是很难理解动态绑定的定义。除此之外,它基本上是一种运行时绑定类型。

    2 回复  |  直到 17 年前
        1
  •  3
  •   dsimcha    17 年前

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

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

    foo(bar) //Calls a funciton
    

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

        2
  •  1
  •   kings90    17 年前

    我明白这在多态性中很明显。通常在创建从基类派生的多个类时。如果每个派生类都包含一个每个派生类使用的函数。基类可用于执行派生类的函数,它将正确调用正确的函数。

    例如:

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

    将打印: 汪汪 喵

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

    推荐文章