为了账号安全,请及时绑定邮箱和手机立即绑定

为什么需要动态绑定?

为什么需要动态绑定?

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

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

假设你有

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

}

现在怎么办?没有人可以预先告诉您传入的 A 是 A 还是 B!

换句话说,有很多方法无法在编译时可靠地了解某个对象的确切性质!


查看完整回答
反对 回复 2023-11-10
?
慕容708150

TA贡献1831条经验 获得超4个赞

这在一般情况下是不可能的。例如这里:


A var;


if(x) {

    var = new A();

} else {

    var = new B();

}


var.cry();

在最后一行中,如果 var 引用的是 A 或 B 的实例,则未知。


查看完整回答
反对 回复 2023-11-10
  • 2 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信