I am really confused about dynamic binding and static binding. I have read that determining the type of an object at compile time is called static binding and determining it at runtime is called dynamic binding.
What happens in the code below:
Static binding or dynamic binding?
What kind of polymorphism does this show?
class Animal
{
void eat()
{
System.out.println("Animal is eating");
}
}
class Dog extends Animal
{
void eat()
{
System.out.println("Dog is eating");
}
}
public static void main(String args[])
{
Animal a=new Animal();
a.eat();
}
Your example is dynamic binding, because at run time it is determined what the type of a
is, and the appropriate method is called.
Now assume you have the following two methods as well:
public static void callEat(Animal animal) {
System.out.println("Animal is eating");
}
public static void callEat(Dog dog) {
System.out.println("Dog is eating");
}
Even if you change your main
to
public static void main(String args[])
{
Animal a = new Dog();
callEat(a);
}
this will print Animal is eating
, because the call to callEat
uses static binding, and the compiler only knows that a
is of type Animal
.