Saturday, July 4, 2015

Javarevisited: Difference between Method Overloading and Overriding in Java?



Javarevisited: Difference between Method Overloading and Overriding in Java?
method overloading is resolved during compile time, while method overriding is resolved at runtime. 

Also rules of overriding or overloading a method is different in Java. For example, private, static and final method cannot be overriding in Java but you can still overload them.

For overriding both name and signature of method must remain same, but in for overloading method signature must be different.

call to overloaded methods are resolved using static binding while call to overridden method is resolved using dynamic binding in Java

By the way, Method overloading and method overriding in Java is two important concept in Java which allows Java programmer to declare method with same name but different behavior. 
Method overloading and method overriding is based on Polymorphism in Java. 
In case of method overloading, method with same name co-exists in same class but they must have different method signature, while in case of method overriding, method with same name is declared in derived class or sub class.

Method overloading is resolved using static binding in Java at compile time while method overriding is resolved using dynamic binding in Java at runtime. In short When you overload a method in Java its method signature got changed while in case of overriding method signature remains same but a method can only be overridden in sub class. Since Java supports Polymorphism and resolve object at run-time it is capable to call overridden method in Java.


Rules of Method Overriding in Java

Following are rules of method overriding in java which must be followed while overriding any method. private,static and final method can not be overridden in Java. 
  1. Method signature must be same including return type, number of method parameters, type of parameters and order of parameters 
  2. Overriding method can not throw higher Exception than original or overridden method. means if original method throws IOException than overriding method can not throw super class of IOException e.g. Exception but it can throw any sub class of IOException or simply does not throw any Exception. This rule only applies to checked Exception in Java, overridden method is free to throw any unchecked Exception
  3. Overriding method can not reduce accessibility of overridden method , means if original or overridden method is public than overriding method can not make it protected. 
1) First and most important difference between method overloading and overriding is that, In case of method overloading in Java, signature of method changes while in case of method overriding it remain same.
2) Second major difference between method overloading vs overriding in Java is that You can overload method in one class but overriding can only be done on subclass.
3) You can not override staticfinal and private method in Java but you can overload static, final or private method in Java.
4) Overloaded method in Java is bonded by static binding and overridden methods are subject to dynamic binding.
5) Private and final method can also be not overridden in Java.

1) In case of method overloading method signature gets changed while in case of overriding signature remains same.
2) Return type is not part of method signature in Java.
3) Overloaded method can be subject to compile time binding but overridden method can only be bind at run-time.
4) Both overloaded and overridden method has same name in Java.
7) From Java 5 onwards you can use annotation in Java to declare overridden method just like we did with @override@overrideannotation allows compiler, IDE to cross verify or check if this method is really overrides super class method or not.

Covariant Method Overriding in Java

From jdk 5 on, we can enable to use subtype of return type of overridden method. This is really useful, when original method returns a general type like java.lang.Object. If you are overriding clone() method in Java then you can use this feature to return actual type
-- method return type is not part of method signature.

Read full article from Javarevisited: Difference between Method Overloading and Overriding in Java?

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts