What's the difference between overloading a method and overriding it in Java?
Is there a difference in method signature, access specifier, return type, etc.?
To overload a method with a new method, the new method should have a different signature. I.e. two overloaded methods have the same name, but different parameters. Here's an example of two overloaded methods:
Based on the parameter types, the corresponding method will be called. Note that changing the return type is not enough (though you can do this additionally).
When a method is overridden, then the new method has the same signature and replaces the overridden method in some cases. Here's an example of an overridden method:
The choice is made based on the object type. For example,
will call the
Now, if you accidentally change the parameters in B, the compiler will inform you, that you are not overriding someMethod() but overloading it.
Overloading, methods have the same name but different parameters.
Overriding, the implementation given in base class is replaced with that in sub class.
Concepts you ask about are covered in Java tutorials.
Explanation for overriding is given as follows:
Overloading is explained in tutorial as follows:
Above explanation for overloading mentions qualifications discussed in the lesson titled "Interfaces and Inheritance":
Overloading a method is typically defined as "providing multiple available methods with the same name, differing by the number and type of inputs and outputs". The concept is usually that you want to be able to perform the same basic operation given varying sets of inputs: you can, for instance, "add" any two values of numeric type, however it is usually important to know what the exact type of the value is so that you can take advantage of or plan for specific behaviors of that type. As such, you would define a method for each combination of numeric types (and or collections) you wish to support. All these methods have the same name, but different "signatures"; at compile-time, the compiler will match a call to a particular method name with a given combination of inputs to a specific pointer in the application memory used to store code.
Overriding a method is typically defined as "providing a different implementation in a derived class of a method with a particular signature defined in the base class". There are many reasons to override a method; virtually all of them have in common the fact that the derived class has additional knowledge of what must be done, which cannot be known by the base class. There are two flavors of overriding in most OO languages; overriding can replace the base class method, or it can extend the base class method. The difference is usually that a derived class that is extending a base class implementation will call the base class's overridden version of the method at some point during the execution of the overriding method. This allows overriding classes to "re-use" common areas of the operation which are contained in the base class.
Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.
Would you like to answer one of these unanswered questions instead?