Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java APIs 和框架

Java 类引用

Java 有用资源

Java - 动态绑定



绑定是一种在方法调用和方法实际实现之间创建链接的机制。根据Java 中的多态性概念对象可以具有许多不同的形式。对象的形态可以在编译时和运行时解析。

Java 动态绑定

动态绑定是指在运行时解析方法调用和方法实现之间链接的过程(或者,在运行时调用重写方法的过程)。动态绑定也称为运行时多态性后期绑定。动态绑定使用对象来解析绑定。

Java 动态绑定的特性

  • 链接- 方法调用和方法实现之间的链接在运行时解析。

  • 解析机制- 动态绑定使用对象类型来解析绑定。

  • 示例- 方法重写是动态绑定的示例。

  • 方法类型- 虚方法使用动态绑定。

Java 动态绑定的示例

在这个例子中,我们创建了两个类 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 动态绑定:使用 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();   // 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
广告