在面向对象编程中,官方是指将策略调用与其执行相连接的方法。 Java是一种面向对象的编程语言,支持早期权威和晚期权威,分别称为不活跃权威和活跃权威。两种形式的绑定都有优点和应用。我们将在这篇文章中介绍 Java 中早期绑定和晚期绑定的语法、解释以及区别。
Java 中早期绑定的语法如下。
<ClassName> <objectName> = new <ClassName>();
Java 中后期绑定的语法如下。
<ClassName> <objectName> = new <DerivedClassName>();
类的类型是在早期绑定的编译时决定的,方法的实现是根据对象的指定类型来选择的。这意味着编译器知道对象的特定类,并且可以将方法调用直接与方法实现联系起来。
另一方面,后期绑定在运行时确定类类型,并根据对象的实际类型选择方法实现。这表明编译器不知道对象的精确类,必须依赖运行时环境来找到正确的方法实现。
在早期绑定中,方法调用在编译时解析。让我们考虑以下早期绑定算法 -
声明一个名为 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
我们有一个带有 draw() 函数的 Shape 类,该函数在此代码中打印“绘制形状”。我们还有一个 Circle 类,它扩展了 Shape 类并重写了 draw() 函数以输出“绘制一个圆”。在 Main 类中,我们通过将其声明为 Shape 类型,使用早期绑定创建了 Circle 类的对象。当我们调用形状对象的draw()函数时,结果将是“画一个圆”。这是因为方法调用与构建时的 Circle 类的实现相关联。
在后期绑定中,方法调用在运行时解析。让我们考虑以下后期绑定算法 -
声明一个名为 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
在这段代码中,我们有一个 Animal 类,它有一个 makeSound() 方法,可以打印“Animal gets a sound”。我们还有两个子类 Dog 和 Cat,它们扩展 Animal 类并重写 makeSound() 方法以分别打印“Dog barks”和“Cat meows”。在 Main 类中,我们使用后期绑定创建了 Dog 类的对象,并将其声明为 Animal 类型。当我们在动物对象上调用 makeSound() 方法时,输出将是“Dog barks”。这是因为方法调用在运行时根据对象的实际类型绑定到 Dog 类的实现。
差异点 |
早期绑定 |
后期绑定 |
---|---|---|
解析时间 |
编译时间 |
运行时 |
方法实现 |
根据对象声明的类型确定 |
根据对象的实际类型确定 |
灵活性 |
动态更改方法实现的灵活性有限 |
通过动态方法分派和多态性提供灵活性 |
性能 |
由于方法调用在编译时解析,因此性能更快 |
由于方法调用在运行时解析,因此性能稍慢 |
对象声明 |
对象声明使用类类型 |
对象声明使用派生类类型 |
早期绑定和后期绑定是Java中两个重要的概念,它们决定了如何解析方法调用。后期绑定根据运行时对象的实际类型解析方法调用,而早期绑定则在编译时将方法调用链接到其实现。每种方法都有其独特的优点和用途。尽管早期绑定提供了更好的性能,因为方法调用是在编译时解析的,但它不允许对方法实现进行动态更改。另一方面,后期绑定允许动态方法分派,从而实现方法调用的多态性和灵活性。了解早期绑定和后期绑定之间的差异对于编写高效灵活的 Java 程序至关重要。
以上是Java中早期绑定和晚期绑定的区别的详细内容。更多信息请关注PHP中文网其他相关文章!