Java 中的动态方法分派或运行时多态性

java programming java8object oriented programming

Java 中的运行时多态性是通过方法重写实现的,其中子类重写其父类中的方法。重写的方法本质上隐藏在父类中,除非子类在重写方法中使用 super 关键字,否则不会调用该方法。此方法调用解析发生在运行时,称为动态方法分派机制。

示例

让我们看一个例子。

class Animal {
   public void move() {
      System.out.println("动物可以动");
   }
}

class Dog extends Animal {
    public void move() {
      System.out.println("狗可以走路和跑步");
   }
}

public class TestDog {

   public static void main(String args[]) {
   
      Animal a = new Animal(); // Animal 引用和对象
      Animal b = new Dog(); // Animal 引用但 Dog 对象

      a.move(); // 运行 Animal 类中的方法
      b.move(); // 运行 Dog 类中的方法
   }
}

将产生以下结果 −

输出

动物可以移动
狗可以走和跑

在上面的例子中,你可以看到,尽管 b 是 Animal 类型,但它运行 Dog 类中的 move 方法。原因是:在编译时,检查的是引用类型。然而,在运行时,JVM 会找出对象类型,并运行属于该特定对象的方法。

因此,在上面的例子中,程序将正确编译,因为 Animal 类具有 move 方法。然后,在运行时,它会运行该对象特定的方法。


相关文章