静态绑定与动态绑定

在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种就是动态绑定,亦称为后期绑定。

区别对比

1.静态绑定发生在编译时期,动态绑定发生在运行时
2.使用private或static或final修饰的变量或者方法(静态方法、私有方法、实例化构造器、父类方法、final修饰),使用静态绑定。而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。
3.静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。
4.重载(Overload)的方法使用静态绑定完成,而重写(Override)的方法则使用动态绑定完成。

动态绑定的过程:
虚拟机提取对象的实际类型的方法表;
虚拟机搜索方法签名;
调用方法。

在向上转型的情况下,对象的方法可以找到子类,而对象的属性还是父类的属性。

动态绑定缺点:动态绑定在函数调用时需要在虚函数表中查找,所以性能比静态函数调用稍低。

原文地址:https://www.cnblogs.com/wzyxidian/p/5169239.html