运行时多态性或动态方法分派
原文:https://www.studytonight.com/java/dynamic-method-dispatch.php
动态方法分派是一种在运行时解析对被覆盖方法的调用的机制。这就是 java 如何实现运行时多态性。当被覆盖的方法被引用调用时,java 根据它引用的对象的类型来决定执行该方法的哪个版本。简单地说,它引用的对象类型决定了将调用哪个版本的覆盖方法。
Java 中的向上转换
当父类引用变量引用子类对象时,称为上推。在 Java 中,这是可以做到的,并且在多个子类扩展一个父类的情况下很有帮助。在这些情况下,我们可以创建一个父类引用,并将子类对象分配给它。
让我们举个例子来理解它,
class Game
{
public void type()
{
System.out.println("Indoor & outdoor");
}
}
Class Cricket extends Game
{
public void type()
{
System.out.println("outdoor game");
}
public static void main(String[] args)
{
Game gm = new Game();
Cricket ck = new Cricket();
gm.type();
ck.type();
gm = ck; //gm refers to Cricket object
gm.type(); //calls Cricket's version of type
}
}
室内和室外游戏室外游戏
注意最后一个输出。这是因为语句,gm = ck;
。现在gm.type()
将调用板球类版本的type()
法。因为这里gm
指的是蛐蛐对象。
问:Java 中静态绑定和动态绑定的区别?
Java 中的静态绑定发生在编译时,而动态绑定发生在运行时。静态绑定使用类型(类)信息进行绑定,而动态绑定使用类(对象)的实例在运行时解析方法的调用。重载方法使用静态绑定绑定,而覆盖方法在运行时使用动态绑定绑定。
简单来说,静态绑定意味着调用方法的对象类型是由编译器在编译时确定的。而动态绑定是指调用方法的对象类型在运行时由编译器确定。