< 返回新闻公告列表

什么是静态绑定和动态绑定,它们有什么区别及优点

发布时间:2020-04-07 10:18:12    来源: 知鸟云

静态绑定和动态绑定简介

这是两种类型的绑定。绑定是指方法调用与方法主体的关联。在静态绑定中,所有赋值和声明都在编译时发生。他们彼此之间有很多优点和缺点。在性能上,静态绑定优于最终方法和变量的动态绑定。静态绑定也称为早期绑定。众所周知,方法的绑定(如静态、私有和最终)是在编译时发生的,而在动态绑定中,编译器无法确定将调用哪个方法。
下面给出的示例是一个更好的示例,易于理解

例子1

public class StaticBindingExample {
public static void main(String args[]) {
Vehicle veh = new MotorBike();
veh.start();
}
}
class Vehicle {
static void start() {
System.out.println("vehicle will start now..");
}
}
class MotorBike extends Vehicle {
static void start() {
System.out.println("Bike will start now..");
}
}

在上面给出的示例中,我们可以看到静态绑定是如何防止类重载的。

static-binding.png

下面给出的示例将显示动态绑定的工作方式,此处子类方法将覆盖父类

范例 #2

public class StaticBindingExample {
public static void main(String args[]) {
Vehicle veh = new MotorBike();
veh.start();
}
}
class Vehicle {
void start() {
System.out.println("vehicle will start now..");
}
}
class MotorBike extends Vehicle {
void start() {
System.out.println("Bike will start now..");
}
}

在此示例中,父类和子类方法下的start方法中不存在static,因此具有相同名称的方法将覆盖父类方法。因此发生。

static-binding1.png

在上面提供的屏幕截图中,给出了程序的输出。

为什么要进行静态绑定和动态绑定?

编程必须使用静态和动态绑定来处理不同的情况。编译时绑定称为“早期绑定”,即这意味着在程序执行的编译时(一开始)需要声明内容时。在动态绑定中,绑定在运行时发生,也称为后期绑定。方法和变量(定义为静态,最终和私有)是指静态绑定,而在运行时进行绑定的虚拟方法称为动态绑定。方法重载 /运算符重载使用静态绑定,因此它是最好的例子之一,而重载使用动态,因此它被称为动态绑定的最好例子。在这种情况下,从不使用Real对象,而在Dynamic Binding中使用real对象。

 

例子

在下面给出的示例中,我们可以看到静态绑定是如何发生的

例子1

//父类的实现

class Colony{
//Static method to start the electricity of the Colony
public static void start electricity(){
//printing the message here
System.out.println("Colony Electricity is On.");
}
}
//Child class implementation
class Building extends Colony{
//Static method to start the electricity of Building
public static void startElectricity(){
//printing the message here
System.out.println("Building Electricity is On.");
}
}
public class StaticBindingExample {
public static void main(String args[]) {
//Creating object of the parent class type
Colony col = new Colony();
col.startElectricity();
//Creating object of the child class type
Colony col2 = new Building();
col2.startElectricity();
}
}

在上述程序中,col是类Colony类型的引用变量,指向类Colony的对象。col2还是类Colony类型的引用变量,但指向Building类的对象。进行编译时,绑定编译器从不检查对象的类型,而只是检查引用变量的类型。

在上面的程序中,例如col .startElectricity(),编译器会检查collon类中是否存在start electric()方法定义,因为col是类Colony类型。类似地,对于col2.startElectricity()方法调用,它检查是否在Colony类中存在start electric()方法,因为col2也是Colony类。它不检查col2 col2指向哪个对象。这种类型的绑定称为静态绑定。

输出:

static-binding2.png

程序的上述输出显示了如何使用静态成员来防止覆盖。

范例#2

在下面给出的示例中,我们可以看到动态绑定在运行时如何发生

//父类的实现

class Colony{
//method to start the electricity of the Colony
void startElectricity(){
//printing the message here
System.out.println("Colony Electricity is On.");
}
}
//Child class implementation
class Building extends Colony{
//method to start the electricity of Building
void startElectricity(){
//printing the message here
System.out.println("Building Electricity is On.");
}
}
public class StaticBindingExample {
public static void main(String args[]) {
//Creating object of the parent class type
Colony col = new Colony();
col.startElectricity();
//Creating object of the child class type
Colony col2 = new Building();
col2.startElectricity();
}
}

在上面给出的程序中,所有内容都与静态示例程序中的相同,但是在此示例中,删除了方法“ static”的成员。在此期间,col.startElectricity()指向的主要对象的方法将被调用。对于col2.startElectricity()调用,将调用col2指向的主对象的方法。这种类型的绑定称为动态绑定。

输出:

static-binding3.png

 

优点

静态绑定执行比动态绑定更有效和更快。该绑定编译器知道这些类型的方法不能被覆盖。在静态绑定中,使用类型,而动态绑定将对象用于绑定。动态绑定的主要优点之一就是灵活性,由于灵活性使单个函数可以在运行时处理不同类型的对象。在“静态绑定”中,在编译之前需要所有信息,而在“动态绑定”中,运行前没有可用信息。静态绑定可以使用常规功能进行,而动态绑定可以使用虚拟功能进行。

 

总结

这些是面向对象编程的一些重要概念。绑定是指代码的执行。它发生在编译时,而动态绑定发生在运行时。定义,声明和声明范围,这是静态绑定的三个重要支柱,而在动态绑定中,绑定的名称和绑定的生存期很重要。


相关推荐