Java Dynamic Method Dispatch | Runtime Polymorphism In Java

Dynamic method dispatch is a way to resolve overridden method calls at run time instead of compile time. It is based on the concept of up-casting. Up-casting means “A super class reference variable can refer to subclass object”.

Java Dynamic Method Dispatch Example

package com.w3schools;

class Engineer {
    public void show(){ 
        System.out.println("Engineer details."); 
    }
}

public class SoftwareEngineer extends Engineer{

    public void show(){
          System.out.println("Software Engineer details.");
    }

    public static void main(String args[]){
    	Engineer obj = new SoftwareEngineer();
       
    	//Method call will be resolved at runtime.
        obj.show();
    }
}

Output:

Software Engineer details.

Note: Only superclass methods can be overridden in a subclass, data members of the super class cannot be overridden.

package com.w3schools;

class Engineer {
    int eId = 20;
}

class SoftwareEngineer extends Engineer {
    int eId = 50;
}

class DevOpsEngineer extends SoftwareEngineer {
    int eId = 60;
}

public class EngineerTest {

    public void show(){
          System.out.println("Software Engineer details.");
    }

    public static void main(String args[]){
    	//Superclass can contain subclass object. 
    	Engineer obj1 = new SoftwareEngineer(); 
    	Engineer obj2 = new DevOpsEngineer(); 
    	
    	//In both calls eId of superclass will be printed. 
    	System.out.println(obj1.eId); 
    	System.out.println(obj2.eId);
    }
}

Output:

20
20