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(); }
The static binding uses Type information for binding while Dynamic binding uses Objects to resolve to bind. Overloaded methods are resolved (deciding which method to be called when there are multiple methods with the same name) using static binding while overridden methods use dynamic binding, i.e, at run time.
Dynamic binding or late binding is the mechanism a computer program waits until runtime to bind the name of a method called to an actual subroutine. It is an alternative to early binding or static binding where this process is performed at compile-time.
Static Binding (also known as Early Binding). Dynamic Binding (also known as Late Binding).
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With