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

原文:https://www.studytonight.com/java/dynamic-method-dispatch.php

动态方法分派是一种在运行时解析对被覆盖方法的调用的机制。这就是 java 如何实现运行时多态性。当被覆盖的方法被引用调用时,java 根据它引用的对象的类型来决定执行该方法的哪个版本。简单地说,它引用的对象类型决定了将调用哪个版本的覆盖方法。

upcasting in 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 中的静态绑定发生在编译时,而动态绑定发生在运行时。静态绑定使用类型(类)信息进行绑定,而动态绑定使用类(对象)的实例在运行时解析方法的调用。重载方法使用静态绑定绑定,而覆盖方法在运行时使用动态绑定绑定。

简单来说,静态绑定意味着调用方法的对象类型是由编译器在编译时确定的。而动态绑定是指调用方法的对象类型在运行时由编译器确定。