为什么需要动态绑定?

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



qq_笑_17
浏览 124回答 2
2回答

慕村9548890

假设你有void foo(A someA) {   someA.cry()}现在怎么办?没有人可以预先告诉您传入的 A 是 A 还是 B!换句话说,有很多方法无法在编译时可靠地了解某个对象的确切性质!

慕容708150

这在一般情况下是不可能的。例如这里:A var;if(x) {    var = new A();} else {    var = new B();}var.cry();在最后一行中,如果 var 引用的是 A 或 B 的实例,则未知。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java