为什么需要动态绑定?

时间:2019-10-19 19:10:41

标签: java dynamic-binding

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

2 个答案:

答案 0 :(得分:2)

假设您有

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

}

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

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

答案 1 :(得分:1)

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

A var;

if(x) {
    var = new A();
} else {
    var = new B();
}

var.cry();

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

相关问题