首页 > 解决方案 > 为什么需要动态绑定?

问题描述

我无法弄清楚为什么我们需要动态绑定(后期绑定)。假设我们有 A 类和 B 类,假设 B 类扩展了 A 类,现在我们可以编写诸如“A var= new B();”之类的东西 现在假设两个类都包含具有相同签名的方法,例如方法“cry()”现在我可以编写类似“var.cry()”的东西,现在仅基于“var”的类型编译器无法绑定权利编译期间实例“var”的方法,但编译器必须检查以下语句是否合法“A var= new B();” 现在,因为它必须检查该语句是否合法,它必须知道“var”将引用类 B 的实例,现在如果它知道这一点,编译器必须能够在编译时绑定正确的方法?

标签: javadynamic-binding

解决方案


假设你有

void foo(A someA) {
  someA.cry()

}

现在怎么办?没有人能提前告诉你传入的 A 是 A 还是 B!

换句话说,有很多方法不能在编译时可靠地知道某个对象的确切性质!


推荐阅读