Join Regular Classroom : Visit ClassroomTech

Dynamic method dispatched in java

While the examples in the preceding section demonstrate the mechanics of method overriding, they do not show its power. Indeed, if there were nothing more to method overriding than a namespace convention, then it would be, at best, an interesting curiosity, but of little real value. However, this is not the case. Method overriding forms the basis for one of Java’s most powerful concepts: dynamic method dispatch. Dynamic method dispatch is the mechanism
by which a call to an overridden method is resolved at run time, rather than compile time.
Dynamic method dispatch is important because this is how Java implements run-time Polymorphism.

Here is an example that illustrates dynamic method dispatch:

/* JAVA program to understand dynamic method dispatched */
/* www.codewindow.in */
// Dynamic Method Dispatch
class A 
{
    void callme()
    {
        System.out.println("Inside A's callme method");
        
    }
}
class B extends A
{
    // override callme()
    void callme()
    {
        System.out.println("Inside B's callme method");
        
    }
}
class C extends A
{
    // override callme()
    void callme()
    {
        System.out.println("Inside C's callme method");
        
    }
}
class codewindow
{
    public static void main(String args[])
    {
        A a = new A(); // object of type A
        B b = new B(); // object of type B
        C c = new C(); // object of type C
        A r; // obtain a reference of type A
        r = a; // r refers to an A object
        r.callme(); // calls A's version of callme
        r = b; // r refers to a B object
        r.callme(); // calls B's version of callme
        r = c; // r refers to a C object
        r.callme(); // calls C's version of callme
    }
}

Output

Inside A’s callme method
Inside B’s callme method
Inside C’s callme method

This program creates one superclass called A and two subclasses of it, called B and C. Subclasses B and C override callme( ) declared in A. Inside the main( ) method, objects of type A, B, and C are declared. Also, a reference of type A, called r, is declared. The program then in turn assigns a reference to each type of object to r and uses that reference to invoke callme( ).