程序绑定
2020-11-23 本文已影响0人
小船儿爱学习
绑定
指一个方法的调用与方法所在的类(方法主体)关联起来。对Java来说,绑定分为静态绑定(编译期绑定)和动态绑定(运行期绑定)。
静态绑定
在程序执行前方法已经被绑定,也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法,此时由编译器或其它连接程序实现。这里特别说明一点,Java当中只有final,static,private修饰的方法和构造方法是静态绑定。
动态绑定
在运行时根据具体对象的类型进行绑定。需要明确的是,动态绑定针对的范畴只是对象的方法。动态绑定的过程如下:
1、虚拟机提取对象的实际类型的方法表。
2、虚拟机搜索方法签名。
3、调用方法。
总结
JAVA 虚拟机调用一个类方法时(静态方法),它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法。相反,当虚拟机调用一个实例方法时,它会基于对象实际的类型(只能在运行时得知)来选择所调用的方法,这就是动态绑定,是多态的一种。动态绑定为解决实际的业务问题提供了很大的灵活性,是一种非常优美的机制。
与方法不同,在处理Java类中的成员变量(实例变量和类变量)时,并不是采用运行时绑定,而是一般意义上的静态绑定。所以在向上转型的情况下,对象的方法可以找到子类,而对象的属性(成员变量)还是父类的属性(子类对父类成员变量的隐藏)。
综上,静态绑定针对的范畴包含private、final、static修饰的方法以及成员变量(包含实例变量和类变量);动态绑定针对的范畴只是实例方法。