绑定是一种在方法调用和方法实际实现之间创建链接的机制。根据 Java 中的多态性概念,对象 可以有多种不同的形式。对象形式可以在编译时和运行时解析。
Java动态绑定
动态绑定是指在运行时解决方法调用和方法实现之间的链接的过程(或者,在运行时调用重写方法的过程)。 动态绑定也称为运行时多态性或后期绑定。 动态绑定使用对象来解析绑定。
Java 动态绑定的特点
链接 - 方法之间的链接调用和方法实现在运行时解析。
解析机制 - 动态绑定使用对象类型来解析绑定。
示例 - 方法覆盖是动态绑定的示例。
方法类型 - 虚拟方法使用动态绑定。
Java 动态绑定示例
在此示例中,我们创建了两个类 Animal 和 Dog,其中 Dog 类扩展了 Animal 类。在 main() 方法中,我们使用 Animal 类引用并为其分配 Dog 类的对象来检查动态绑定效果。
package com.yxjc123;
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 b = new Dog(); // 动物引用, Dog 对象
a.move(); //运行Animal类中的方法
b.move(); //运行Dog类中的方法
}
}
输出
Animals can move
Dogs can walk and run
在上面的示例中,您可以看到,即使 b 是 Animal 的一种类型,它也运行 Dog 类中的 move 方法。
原因是:在编译时,对引用类型进行检查。但是,在运行时,JVM 会计算出对象类型,并运行属于该特定对象的方法。
因此,在上面的示例中,程序将正确编译,因为 Animal 类具有 move 方法。然后,在运行时,它运行特定于该对象的方法。
Java 动态绑定:使用 super 关键字
当调用重写方法的超类版本时,使用 super 关键字,以便我们可以在使用动态绑定时使用父类方法。
示例:使用 super 关键字
在这个示例中,我们创建了两个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(); //调用超类方法
System.out.println("Dogs can walk and run");
}
}
public class TestDog {
public static void main(String args[]) {
Animal b = new Dog(); // 动物引用,Dog 对象
b.move(); //运行Dog类中的方法
}
}
输出
Animals can move
Dogs can walk and run