Java中的运行时多态性是通过方法覆盖实现的,方法覆盖是子类覆盖其父类中的方法。重写的方法本质上隐藏在父类中,除非子类在重写的方法中使用super关键字,否则不会调用该方法。此方法调用解析在运行时发生,称为动态方法分派机制。
让我们来看一个例子。
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 TestDog { public static void main(String args[]) { Animal a = new Animal(); // Animal reference and object 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,因此程序将正确编译。然后,在运行时,它将运行特定于该对象的方法。
本文向大家介绍什么是运行时多态或动态方法重载?,包括了什么是运行时多态或动态方法重载?的使用技巧和注意事项,需要的朋友参考一下 多态是对象采取多种形式的能力。当使用父类引用来引用子类对象时,会在OOP中最常见地使用多态。被子类覆盖的方法称为运行时多态。JVM确定要在运行时而不是编译时执行的方法。 示例 输出结果
问题内容: 运行时多态与静态多态有何不同? 这可以作为运行时多态的示例吗? 代码是从这里挑选的 问题答案: 是的,这是在Java中 在中,编译器本身确定应调用的方法。是静态多态性的一个例子。 在中,编译器无法在编译时确定方法。(如您的示例)是的示例。因为在(如您的示例中),类和中的签名相似。因此,编译器无法在编译时确定应执行的方法。仅在对象创建(这是一个运行时过程)之后,运行时环境才能了解要调用的
这可以是运行时多态性的一个例子吗? 代码已从这里摘取
本文向大家介绍JVM 方法调用之动态分派(详解),包括了JVM 方法调用之动态分派(详解)的使用技巧和注意事项,需要的朋友参考一下 1. 动态分派 一个体现是重写(override)。下面的代码,运行结果很明显。 最终输出sub : f(); 那么虚拟机是怎么做到动态分派的呢? 不同的虚拟机有不同的实现,最常用的是使用虚方法表(Virtual Method Table) 2. 虚方法表 对于Sup
本文向大家介绍在Java中使用运行时多态,包括了在Java中使用运行时多态的使用技巧和注意事项,需要的朋友参考一下 使用多态性的概念,可以以多种方式执行单个动作。可以通过方法重写来执行运行时多态。在编译时解析此方法中的重写方法。 给出了一个演示Java运行时多态性的程序,如下所示: 示例 输出结果
本文向大家介绍php运行时动态创建函数的方法,包括了php运行时动态创建函数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php运行时动态创建函数的方法。分享给大家供大家参考。具体分析如下: 一般的语言函数必须定义了在运行,而php支持在运行时动态创建函数,下面是一个简单的范例,在运动时根据不同的条件创建函数$a 希望本文所述对大家的php程序设计有所帮助。