绑定是一种在方法调用和方法实际实现之间创建链接的机制。根据 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