小编典典
我认为,这种混乱通常来自这些术语的超载。
我们使用高级语言对程序进行编程,而编译器或解释器必须将其转换为机器真正可以理解的内容。
粗略地说,您可以描绘出一个将我们的方法代码转换为某种形式的机器代码的编译器。如果编译器在稍后运行程序时准确地知道该方法在内存中的位置,则它可以安全地找到该已编译方法的每个方法调用,并将其替换为跳转到已编译代码的该地址。居住吧?
好吧,实现这种关系是我理解的约束力。但是,这种绑定可能在不同的时刻发生,例如在编译时,链接时,加载时或在运行时,这取决于语言的设计。
术语“静态”和“动态”通常分别用于指代运行时之前和运行时绑定的事物。
绑定时间越晚,灵活性越高;绑定时间越早,效率越高。语言设计师在创建语言时必须权衡这两个方面。
大多数面向对象的编程语言都支持子类型多态。在这些语言中,虚拟方法是在运行时绑定的,具体取决于此时对象的动态类型。换句话说,虚拟方法调用是在运行时基于所涉及的对象实现的动态类型而不是仅基于其静态类型引用而分派给适当的实现的。
因此,我认为,您必须首先将方法调用绑定到特定的实现或执行地址,然后才能向其分派调用。
2020-11-16