Overloading vs Overriding in Java
- Overloading happens at compile-time while Overriding happens at runtime: The binding of overloaded method call to its definition has happens at compile-time however binding of overridden method call to its definition happens at runtime.
- Static methods can be overloaded which means a class can have more than one static method of same name. Static methods cannot be overridden, even if you declare a same static method in child class it has nothing to do with the same method of parent class.
- The most basic difference is that overloading is being done in the same class while for overriding base and child classes are required. Overriding is all about giving a specific implementation to the inherited method of parent class.
- Static binding is being used for overloaded methods and dynamic binding is being used for overridden/overriding methods.
- Performance: Overloading gives better performance compared to overriding. The reason is that the binding of overridden methods is being done at runtime.
- private and final methods can be overloaded but they cannot be overridden. It means a class can have more than one private/final methods of same name but a child class cannot override the private/final methods of their base class.
- Return type of overloaded methods should be same however in case of method overriding the return type of overriding method can be different from overridden method.
- Argument list should be different while doing method overloading. Argument list should be same in method Overriding.
Overloading example
//A class for adding upto 5 numbers class Sum { int add(int n1, int n2) { return n1+n2; } int add(int n1, int n2, int n3) { return n1+n2+n3; } int add(int n1, int n2, int n3, int n4) { return n1+n2+n3+n4; } int add(int n1, int n2, int n3, int n4, int n5) { return n1+n2+n3+n4+n5; } public static void main(String args[]) { Sum obj = new Sum(); System.out.println("Sum of two numbers: "+obj.add(20, 21)); System.out.println("Sum of three numbers: "+obj.add(20, 21, 22)); System.out.println("Sum of four numbers: "+obj.add(20, 21, 22, 23)); System.out.println("Sum of five numbers: "+obj.add(20, 21, 22, 23, 24)); } }
Output:
Sum of two numbers: 41 Sum of three numbers: 63 Sum of four numbers: 86 Sum of five numbers: 110
Here we have 4 versions of same method
add
. We are overloading the method add()
here.Overriding example
package beginnersbook.com; class CarClass { public int speedLimit() { return 100; } } class Ford extends CarClass { public int speedLimit() { return 150; } public static void main(String args[]) { CarClass obj = new Ford(); int num= obj.speedLimit(); System.out.println("Speed Limit is: "+num); } }
Output:
Speed Limit is: 150
Here
speedLimit()
method of class Ford
is overriding the speedLimit()
method of classCarClass
.
No comments:
Post a Comment