Java 简明教程
Java - Dynamic Binding
绑定是一种在方法调用和方法实际实现之间创建链接的机制。根据 polymorphism concept in Java , object 可以有许多不同的形式。对象形式可以在编译时和运行时进行解析。
Java Dynamic Binding
Dynamic binding 指的是在运行时解析方法调用和方法实现之间链接的过程(或者,是在运行时调用重写方法的过程)。Dynamic binding 也称为 run-time polymorphism 或 late binding。动态绑定使用对象来解析绑定。
Characteristics of Java Dynamic Binding
-
Linking − 在运行时解析方法调用和方法实现之间的链接。
-
Resolve mechanism − 动态绑定使用对象类型来解析绑定。
-
Example − Method overriding 是动态绑定的示例。
-
Type of Methods − 虚拟方法使用动态绑定。
Example of Java Dynamic Binding
在此示例中,我们创建了两个类 Animal 和 Dog,其中 Dog 类扩展了 Animal 类。在 main() 方法中,我们使用 Animal 类引用,并为其分配一个 Dog 类的对象以检查动态绑定效果。
package com.tutorialspoint;
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
class Dog extends Animal {
public void move() {
System.out.println("Dogs can walk and run");
}
}
public class Tester {
public static void main(String args[]) {
Animal a = new Animal(); // Animal reference and object
// Dynamic Binding
Animal b = new Dog(); // Animal reference but Dog object
a.move(); // runs the method in Animal class
b.move(); // runs the method in Dog class
}
}
Animals can move
Dogs can walk and run
在上面的示例中,尽管 b 是 Animal 的一种类型,但它运行 Dog 类中的 move 方法。这样做的原因是:在编译时,针对引用类型进行检查。然而,在运行时,JVM 找出对象类型,并运行属于该特定对象的该方法。
因此,在上面的示例中,程序将正确编译,因为 Animal 类具有 move 方法。然后,在运行时,运行特定于该对象的方法。
Java Dynamic Binding: Using the super Keyword
在调用重写方法的超类版本时,使用 super 关键字,以便能够在使用动态绑定时利用父类方法。
Example: Using the super Keyword
在此示例中,我们创建了两个类 Animal 和 Dog,其中 Dog 类扩展了 Animal 类。Dog 类重写了其超类 Animal 的 move 方法。但是,它使用 super 关键字调用父类 move() 方法,以使在调用子方法时,由于动态绑定,两个 move 方法都被调用。在 main() 方法中,我们使用 Animal 类引用,并为其分配一个 Dog 类的对象以检查动态绑定效果。
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
class Dog extends Animal {
public void move() {
super.move(); // invokes the super class method
System.out.println("Dogs can walk and run");
}
}
public class TestDog {
public static void main(String args[]) {
Animal b = new Dog(); // Animal reference but Dog object
b.move(); // runs the method in Dog class
}
}
Animals can move
Dogs can walk and run