关键区别–静态绑定与动态绑定
Java和C等编程语言支持面向对象编程(OOP)。它允许使用对象构建软件。软件系统或程序中有许多对象。这些对象具有属性和方法。属性描述特征。方法描述对象可以执行的操作。数据使用方法通过对象传递。所需的值通过带有参数的方法调用发送。实际的方法实现在方法定义中。方法调用和方法定义之间存在链接。它被称为绑定。有两种类型的绑定。它们是静态绑定和动态绑定。静态绑定和动态绑定的关键区别在于,在静态绑定中,绑定是在编译时解析的,而动态绑定是在运行时(即实际执行时间)解析的。本文讨论这两种绑定机制之间的区别。
目录
1. 概述和主要区别
2. 什么是静态绑定
3. 什么是动态绑定
4. 静态绑定与动态绑定的相似性
5. 并列比较-静态绑定与动态绑定的表格形式
6. 摘要
什么是静态绑定(static binding)?
绑定是方法调用和方法定义之间的链接。
参考下面用Java编写的程序。
公共A级{
公共无效方法1(){
System.out.println(“方法1”);
}
公共无效方法2(){
System.out.println(“方法2”);
}
公共静态void main(String[]args){
A obj=新A();
目标方法1();
目标方法2();
}
}
根据上述程序,创建了A类型的对象。然后调用方法1和方法2。确定应该调用执行的方法称为绑定。陈述obj.method1()将调用method1()和obj.method2()将调用method2()。此链接正在绑定。
在静态绑定中,绑定由编译器在编译时解析。它也被称为早期绑定。绑定发生在程序实际运行之前。静态绑定发生在方法重载中。参考下面用Java编写的程序。
公共空隙计算{
公共无效金额(int x,int y){
System.out.println(“和为”,x+y);
}
公共空白和(双x,双y){
System.out.println(“和为”,x+y);
}
公共静态void main(String[]args){
Calculation cal=新计算();
计算总和(2,3);
计算总和(5.1,6.4);
}
}
根据上面的程序,当传递两个整数时,将调用包含两个整数的方法。当传递两个double值时,将调用两个double值对应的方法。此绑定过程发生在编译时。编译器知道它应该调用带有两个整数值的sum方法计算总和(2,3)。对于cal(5.1,6.4),它将使用两个双精度值调用sum方法。所有需要的信息在运行前就知道了,提高了程序的效率和执行速度。
什么是动态绑定(dynamic binding)?
在动态绑定中,编译器不会在编译时解析绑定。绑定发生在运行时。它也被称为后期绑定。动态绑定发生在方法重写中。指用Java编写的程序。
公共类形状(){
公共无效绘制(){
System.out.println(“绘制”);
}
}
公共类Circle()扩展形状{
公共无效绘制(){
System.out.println(“画圆”);
}
}
公共类Triangle()扩展形状{
公共无效绘制(){
System.out.println(“绘制三角形”);
}
}
公开课考试{
公共静态void main(String[]args){
形状s;
s=新形状();
s、 绘制();
s=新圆();
s、 绘制();
s=新三角形();
s、 绘制();
}
}
根据上面的程序,类Shape有一个draw()方法。类圆和类三角形扩展了形状类。类圆和类三角可以继承类Shape的属性和方法。因此,类形状是超级类或父类。类圆和类三角形是子类或派生类。这些类还有draw()方法和它们自己的实现。因此,超类中的draw()方法被重写。
在main方法中,调用不同的对象。有一个Shape类型的引用变量,它是s。然后,s根据特定的类调用方法。在编译时,编译器将只引用超级类draw方法。当实际执行开始时,将导致执行不同的绘制方法。首先,s将指向Shape类型的对象。因此,它将调用Shape类中的draw方法。然后s将指向Circle类型的对象,并调用Circle类的draw方法。最后,s将引用Triangle类型的对象,并调用Triangle类中的draw方法。即使引用变量是Shape类型,绑定也恰好依赖于对象类型。这个概念被称为动态绑定。信息是在运行时提供的,因此与静态绑定相比,执行速度较慢。
什么是静态绑定与动态绑定的相似性(the similarity between static binding and dynamic binding)?
- 这两者都与允许对象以多种方式表现的多态性有关。
静态绑定(static binding)和动态绑定(dynamic binding)的区别
静态绑定与动态绑定 | |
静态绑定是在编译期间收集调用函数所需的所有信息的绑定类型。 | 动态绑定是在运行时收集调用函数所需的所有信息的绑定类型。 |
装订时间 | |
静态绑定发生在编译时。 | 动态绑定发生在运行时。 |
功能 | |
静态绑定使用类型信息进行绑定。 | 动态绑定使用对象来解析绑定。 |
实际对象 | |
静态绑定不使用实际对象进行绑定。 | 动态绑定,使用实际对象进行绑定。 |
同义词 | |
静态绑定也称为早期绑定。 | 动态绑定也称为后期绑定。 |
执行 | |
静态绑定的执行速度很快。 | 动态绑定的执行速度很低。 |
例子 | |
静态绑定用于方法重载。 | 动态绑定用于方法重写。 |
总结 - 静态绑定(static binding) vs. 动态绑定(dynamic binding)
方法调用和方法定义之间存在链接。它被称为绑定。有两种类型的绑定称为静态绑定和动态绑定。静态绑定和动态绑定的区别在于,在静态绑定中,绑定在编译时解析,而动态绑定在运行时解析,即实际执行时间。由于所需的信息是在运行时之前提供的,所以与动态绑定相比,静态绑定的执行速度更快。
下载静态绑定与动态绑定的pdf文件
你可以下载这篇文章的PDF版本,并根据引文说明离线使用。请在这里下载PDF版本:静态绑定和动态绑定的区别