The Association of the method call to the method body is known as binding. There are two types of binding in java:
- Static binding.
- Dynamic bindinng.
1. Static Binding or Early Binding in Java:
The binding that resolved at compile time is known as Static Binding or Early Binding. There are three methods that cannot be overridden and the type of the class is determined at the compile time.
They are static, private and final methods. They are bind at compile time. In this type, the compiler knows the type of object or class to which object belongs to during the execution.
Example of Static Binding or Early Binding in Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class SuperClass { static void display() { System.out.println("Displaying superclass."); } } class SubClass extends SuperClass { static void display() { System.out.println("Displaying subclass."); } } public class StaticTest { public static void main(String[] args) { //Reference is of SuperClass type and object is SuperClass type SuperClass sup = new SuperClass(); //Reference is of SuperClass type and object is SubClass type SuperClass sub = new SubClass(); sup.display(); sub.display(); } } |
Output of Static Binding:
1 2 | Displaying superclass. Displaying superclass. |
In this above example, two objects are created (sup, sub) of different types referring to the same class type(SuperClass type). Here the display() method of SuperClass is static, and therefore compiler knows that it will not be overridden in subclasses and also knows which display() method to call and hence no ambiguity.
2. Dynamic Binding or Late Binding in Java:
The binding that resolved at run time is known as Static Binding or Late Binding. The perfect example of this would be Overriding. Consider a method overriding where parent class and child class has the same method.
Example Dynamic Binding in Java:
In the following example, the overriding of a method is possible because no methods are declared static, private, and final.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class SuperClass { void display() { System.out.println("Displaying superclass."); } } class SubClass extends SuperClass { void display() { System.out.println("Displaying subclass."); } } public class StaticTest { public static void main(String[] args) { //Reference is of SuperClass typ and object is SuperClass type SuperClass sup = new SuperClass(); //Reference is of SuperClass typ and object is SubClass type SuperClass sub = new SubClass(); sup.display(); sub.display(); } } |
Output of Dynamic Binding:
1 2 | Displaying superclass. Displaying subclass. |