1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 前期绑定和后期绑定

前期绑定和后期绑定

时间:2018-12-05 16:40:45

相关推荐

前期绑定和后期绑定

前期绑定和后期绑定

转载自:/youngyouth/article/details/79747043

在多态的时候,我们将子类的类型向上转换为父类,进行类型的泛化,便于我们写出实用性很强的代码,新类型不用改变原有代码。

这里有个问题就是:任何类型传进去都是父类型 ,但是在方法调用的时候,却是调用的子类的方法,或者说,编译器是怎么知道,具体该调用哪一个方法的呢?

这就与前期绑定后期绑定有关系了。

前期绑定

前期绑定是面向过程语言的编译器做法:编译器在编译面向过程语言的时候,在出现函数调用的时候,会产生一个对具体函数名字的引用,这样在程序运行的时候,执行到函数调用的语句,就会发现这里一个对 XXX 方法的引用,就会把执行逻辑解析到这个方法的绝对地址上(就是说编译器在编译完成的时候就已经知道这个方法到底是哪个类中的方法)。

但是这一套到了 Java 这里就不好使了,编译器在编译代码的时候,它是无法知道具体调用的方法(也有例外,Java 中的 final、static、private 和构造方法这些方法是前期绑定)。

后期绑定

既然编译时期,编译器搞定不了大部分方法调用的问题,那么就在运行时期来完善:这就是后期绑定

Java 是这样来搞定方法调用的:在每一个对象中存储一小段信息,通过这一小段信息,可以计算出该对象的方法地址,然后去调用方法。

所以 Java 有句名言叫:编译看左边,运行看右边。 这个其实就是后期绑定的原因,Java 的编译器在编译期间,会检查这个要调用的方法是否存在,调用的参数是否准确,返回的类型是否正确;而在运行期,就根据信息去调用具体方法。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。