Java中早期绑定和晚期绑定的区别

2023年 9月 14日 107.3k 0

Java中早期绑定和晚期绑定的区别

在面向对象编程中,官方是指将策略调用与其执行相连接的方法。 Java是一种面向对象的编程语言,支持早期权威和晚期权威,分别称为不活跃权威和活跃权威。两种形式的绑定都有优点和应用。我们将在这篇文章中介绍 Java 中早期绑定和晚期绑定的语法、解释以及区别。

语法

Java 中早期绑定的语法如下。

= new ();

登录后复制

Java 中后期绑定的语法如下。

= new ();

登录后复制

语法解释

类的类型是在早期绑定的编译时决定的,方法的实现是根据对象的指定类型来选择的。这意味着编译器知道对象的特定类,并且可以将方法调用直接与方法实现联系起来。

另一方面,后期绑定在运行时确定类类型,并根据对象的实际类型选择方法实现。这表明编译器不知道对象的精确类,必须依赖运行时环境来找到正确的方法实现。

方法一:早期绑定

在早期绑定中,方法调用在编译时解析。让我们考虑以下早期绑定算法 -

  • 声明一个名为 Shape 的类,并使用名为 draw() 的方法。

  • 创建一个名为 Circle 的子类来扩展 Shape 类。

  • 在Circle类中实现draw()方法。

  • 使用早期绑定创建 Circle 类的对象。

  • 调用对象的draw()方法。

示例

class Shape {
public void draw() {
System.out.println("Drawing a shape");
}
}

class Circle extends Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}

public class Main {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw();
}
}

登录后复制

输出

Drawing a circle

登录后复制

方法1中代码说明

我们有一个带有 draw() 函数的 Shape 类,该函数在此代码中打印“绘制形状”。我们还有一个 Circle 类,它扩展了 Shape 类并重写了 draw() 函数以输出“绘制一个圆”。在 Main 类中,我们通过将其声明为 Shape 类型,使用早期绑定创建了 Circle 类的对象。当我们调用形状对象的draw()函数时,结果将是“画一个圆”。这是因为方法调用与构建时的 Circle 类的实现相关联。

方法 2:后期绑定

在后期绑定中,方法调用在运行时解析。让我们考虑以下后期绑定算法 -

  • 声明一个名为 Animal 的类,并使用名为 makeSound() 的方法。

  • 创建两个名为 Dog 和 Cat 的子类来扩展 Animal 类。

  • 在 Dog 和 Cat 类中实现 makeSound() 方法。

  • 使用后期绑定创建 Dog 类的对象。

  • 调用对象的 makeSound() 方法。

示例

class Animal {
public void makeSound() {
System.out.println("Animal makes a sound");
}
}

class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}

class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat meows");
}
}

public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
animal.makeSound();
}
}

登录后复制

输出

Dog barks

登录后复制

方法2中代码说明

在这段代码中,我们有一个 Animal 类,它有一个 makeSound() 方法,可以打印“Animal gets a sound”。我们还有两个子类 Dog 和 Cat,它们扩展 Animal 类并重写 makeSound() 方法以分别打印“Dog barks”和“Cat meows”。在 Main 类中,我们使用后期绑定创建了 Dog 类的对象,并将其声明为 Animal 类型。当我们在动物对象上调用 makeSound() 方法时,输出将是“Dog barks”。这是因为方法调用在运行时根据对象的实际类型绑定到 Dog 类的实现。

Java 中早期绑定和后期绑定的区别

差异点

早期绑定

后期绑定

解析时间

编译时间

运行时

方法实现

根据对象声明的类型确定

根据对象的实际类型确定

灵活性

动态更改方法实现的灵活性有限

通过动态方法分派和多态性提供灵活性

性能

由于方法调用在编译时解析,因此性能更快

由于方法调用在运行时解析,因此性能稍慢

对象声明

对象声明使用类类型

对象声明使用派生类类型

结论

早期绑定和后期绑定是Java中两个重要的概念,它们决定了如何解析方法调用。后期绑定根据运行时对象的实际类型解析方法调用,而早期绑定则在编译时将方法调用链接到其实现。每种方法都有其独特的优点和用途。尽管早期绑定提供了更好的性能,因为方法调用是在编译时解析的,但它不允许对方法实现进行动态更改。另一方面,后期绑定允许动态方法分派,从而实现方法调用的多态性和灵活性。了解早期绑定和后期绑定之间的差异对于编写高效灵活的 Java 程序至关重要。

以上就是Java中早期绑定和晚期绑定的区别的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论