天天看点

前期绑定和后期绑定的区别绑定

        在java多态调用中,对于需要传入一个类的方法,我们可以传入该类的子类,从而调用子类的重写后的方法。之所以编译器可以确定调用哪个对象的方法,主要跟前期绑定和后期绑定有关。

绑定

        将一个方法调用同一个方法主题关联起来称作绑定

前期绑定

        程序执行前进行绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法)。编译程序时,在出现函数调用的时候,会产生一个对具体函数名字的引用,这样在程序运行的时候,执行到函数调用的语句,就会发现这里一个对XXX方法的引用,就会把执行逻辑解析到这个XXX方法的绝对地址上,例如final(final会关闭后期绑定),static,private,构造方法,成员变量(包括静态及非静态)都是属于前期绑定,C方法调用都是前期绑定

后期绑定(动态绑定或运行时绑定)

        程序在运行前虚拟机并不知道类的类型,运行时根据对象的类型进行绑定。后期绑定主要通过对象中安置某种“配置信息”,然后利用这一段信息,虚拟机可以计算出该对象的方法地址,然后去调用,实现了类型的识别和方法的调用。

动态绑定的过程:

  1. 虚拟机提取对象的实际类型的方法表;
  2. 虚拟机搜索方法签名;
  3. 调用方法。

        除了前期绑定的,其他都是后期绑定。

参考文章:

  1.   前期绑定 和 后期绑定
  2.   Java前期(静态)绑定和后期(动态)绑定
  3.   Java编程思想

继续阅读