关键区别 - 静态结合与动态结合
编程语言,例如爪哇和C#支持面向对象的编程(OOP)。它允许使用对象。软件系统或程序中有许多对象。这些对象有属性和方法。属性描述了特征。方法描述对象可以执行的动作。数据通过方法通过对象传递。所需值是通过带有参数的方法调用发送的。实际方法实现在方法定义中。方法调用与方法定义之间存在链接。它被称为结合。绑定有两种类型。它们是静态结合和动态结合。 The关键区别在静态结合和动态结合之间,是,在静态绑定中,在编译时间解析了绑定,而在运行时间解析动态结合,这是执行的实际时间。本文讨论了这两种结合机制之间的差异。
内容
1。概述和关键差异
2。什么是静态绑定
3。什么是动态绑定
4。静态结合和动态结合之间的相似性
5。并排比较 - 静态结合与表格形式的动态结合
6。概括
什么是静态绑定?
绑定是方法调用和方法定义之间的链接。

图01:静态结合和动态结合
请参阅下面用Java编写的程序。
公共类A {
public void method1(){
system.out.println(“ method1”);
}
public void method2(){
system.out.println(“ method2”);
}
公共静态void main(string [] args){
a obj = new a();
obj.method1();
obj.method2();
}
}
根据上述程序,创建了A类型的对象。然后调用方法1和方法2。确定应要求执行的方法称为绑定。语句OBJ.Method1()将调用Method1()和OBJ.Method2()将调用Method2()。此链接具有绑定。
在静态结合中,结合在编译时间解析编译器。也称为早期结合。绑定发生在程序实际运行之前。静态结合发生在方法过载中。请参阅下面用Java编写的程序。
公共空隙计算{
public void sum(int x,int y){
system.out.println(“ sum是”,x+y);
}
public void sum(double x,double y){
system.out.println(“ sum是”,x+y);
}
公共静态void main(string [] args){
计算cal =新计算();
Cal.sum(2,3);
Cal.sum(5.1,6.4);
}
}
根据上述程序,传递两个整数时,将调用带有两个整数的方法。传递两个双重值时,将调用与两个双重值相对应的方法。这种结合过程发生在编译时。编译器知道,它应该调用带有两个整数值的cal.sum(2,3)的总和方法。对于Cal(5.1,6.4),它将调用具有两个双重值的总和方法。所有必需的信息都是在运行时知道的,因此它提高了程序效率和执行速度。
什么是动态绑定?
在动态结合中,编译器不能在编译时解析结合。绑定在运行时发生。也称为较晚的绑定。动态结合发生在方法中覆盖。请参阅Java编写的程序。
公共类Shape(){
public void draw(){
system.out.println(“绘制形状”);
}
}
公共类Circle()扩展了形状{
public void draw(){
system.out.println(“绘制圆圈”);
}
}
公共类Triangle()扩展了形状{
public void draw(){
system.out.println(“绘制三角形”);
}
}
公共类测试{
公共静态void main(string [] args){
形状s;
s = new Shape();
s.draw();
s = new Circle();
s.draw();
s = new Triangle();
s.draw();
}
}
根据上述程序,类形状具有方法绘制()。类圆圈和类三角形扩展了形状类。类圆圈和类三角形可以继承类形状的属性和方法。因此,班级形状是超级班级或父级。班级和三角班级是子类或派生的类。这些类还具有带有自己的实现的绘制方法。因此,超级类中的draw()方法被覆盖。
在主要方法中,调用了不同的对象。有一个形状类型的参考变量,即s。然后,S根据特定类调用该方法。在编译时,编译器只会引用超级绘制方法。当实际执行开始时,它将导致执行不同的绘制方法。首先,S将指向类型形状的对象。因此,它将在形状类中调用Draw方法。然后,S将指向类型圆的对象,并将调用Circle类的绘制方法。最后,s将引用类型三角形的对象,它将在三角形类中调用Draw方法。即使是参考变量为类型形状,绑定恰好取决于对象类型。这个概念称为动态结合。该信息在运行时提供,因此与静态绑定相比,执行速度较慢。
静态结合和动态结合之间有什么相似性?
- 这两者都与多态性这允许对象以多种方式行事。
静态结合和动态结合之间有什么区别?
静态结合与动态结合 |
|
静态绑定是收集所有必需信息以在编译时间调用功能的绑定类型。 | 动态绑定是收集所有必需信息以在运行时间调用功能的绑定类型。 |
绑定时间 | |
静态结合发生在编译时。 | 动态绑定在运行时发生。 |
功能 | |
静态绑定使用类型信息进行绑定。 | 动态绑定使用对象解析以绑定。 |
实际对象 | |
静态绑定不会使用实际对象进行绑定。 | 动态绑定,使用实际对象进行绑定。 |
同义词 | |
静态结合也称为早期结合。 | 动态结合也称为晚结合。 |
执行 | |
执行速度在静态绑定中很快。 | 动态绑定的执行速度较低。 |
例子 | |
静态结合用于方法超载。 | 动态结合用于方法覆盖。 |
摘要 - 静态结合与动态结合
方法调用与方法定义之间存在链接。它被称为结合。有两种称为静态结合和动态结合的绑定类型。静态结合和动态结合之间的差异在于,在静态结合中,在编译时间解析结合,而在运行时间解决动态结合,这是实际执行时间。由于在运行时间之前提供了所需的信息,因此与动态绑定相比,静态绑定在执行中很快。
下载静态绑定与动态绑定的PDF
您可以下载本文的PDF版本,并根据引文注释将其用于离线目的。请在此处下载PDF版本:静态结合和动态结合之间的差异
参考:
1.Java访谈04 - 静态绑定与动态绑定,Mahika教程,2017年12月27日。在这里可用
发表评论