Answer:
class Base
{
void m1()
{
System.out.println("Origin: Base Class");
}
}
class Derive extends Base
{
void m1()
{
System.out.println("Origin: Derived Class");
}
}
class D1 extends Derive
{
void m1()
{
System.out.println("Origin: D1 - Child of Derive Class");
}
}
class TestDynamicBinding
{
public static void main(String args[])
{
Base base = new Base(); // object of Base class
Derive derive = new Derive(); // object of Derive class
D1 d1 = new D1(); // object of D1 class
Base reference; // Reference of type Base
reference = base; // reference referring to the object of Base class
reference.m1(); //call made to Base Class m1 method
reference = derive; // reference referring to the object of Derive class
reference.m1(); //call made to Derive Class m1 method
reference = d1; // reference referring to the object of D1 class
reference.m1(); //call made to D1 Class m1 method
}
}
Explanation:
The solution demonstrates dynamic binding behavior because the linking procedure used calls overwritten method m1() is made at run time rather than doing it at the compile time. The code to be executed for this specific procedural call is also known at run time only.