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 方法。然后,在运行时,它会运行该对象特定的方法。