Dynamic method dispatch is a mechanism to resolve overridden method call at run time instead of compile time. It is based on the concept of up-casting (A super class reference variable can refer subclass object.).
Example 1:
/**
* This program is used for simple method overriding example.
* with dynamic method dispatch.
* @author W3spoint
*/
class Student {
/**
* This method is used to show details of a student.
* @author W3spoint
*/
public void show(){
System.out.println("Student details.");
}
}
public class CollegeStudent extends Student {
/**
* This method is used to show details of a college student.
* @author W3spoint
*/
public void show(){
System.out.println("College Student details.");
}
//main method
public static void main(String args[]){
//Super class can contain subclass object.
Student obj = new CollegeStudent();
//method call resolved at runtime
obj.show();
}
} |
/**
* This program is used for simple method overriding example.
* with dynamic method dispatch.
* @author W3spoint
*/
class Student {
/**
* This method is used to show details of a student.
* @author W3spoint
*/
public void show(){
System.out.println("Student details.");
}
} public class CollegeStudent extends Student {
/**
* This method is used to show details of a college student.
* @author W3spoint
*/
public void show(){
System.out.println("College Student details.");
} //main method
public static void main(String args[]){
//Super class can contain subclass object.
Student obj = new CollegeStudent(); //method call resolved at runtime
obj.show();
}
}
Output:
College Student details.
School Student details. |
College Student details.
School Student details.
Download this example.
Note: Only super class methods can be overridden in subclass, data members of super class cannot be overridden.
/**
* This program is used for simple method overriding example.
* with dynamic method dispatch.
* @author W3spoint
*/
class Student {
int maxRollNo = 200;
}
class SchoolStudent extends Student{
int maxRollNo = 120;
}
class CollegeStudent extends SchoolStudent{
int maxRollNo = 100;
}
public class StudentTest {
public static void main(String args[]){
//Super class can contain subclass object.
Student obj1 = new CollegeStudent();
Student obj2 = new SchoolStudent();
//In both calls maxRollNo of super class will be printed.
System.out.println(obj1.maxRollNo);
System.out.println(obj2.maxRollNo);
}
} |
/**
* This program is used for simple method overriding example.
* with dynamic method dispatch.
* @author W3spoint
*/
class Student {
int maxRollNo = 200;
} class SchoolStudent extends Student{
int maxRollNo = 120;
} class CollegeStudent extends SchoolStudent{
int maxRollNo = 100;
} public class StudentTest {
public static void main(String args[]){
//Super class can contain subclass object.
Student obj1 = new CollegeStudent();
Student obj2 = new SchoolStudent(); //In both calls maxRollNo of super class will be printed.
System.out.println(obj1.maxRollNo);
System.out.println(obj2.maxRollNo);
}
}
Output:
Download this example.
Next Topic: Association in java with example.
Previous Topic: Method overriding in java with example.