CSC/ECE 517 Fall 2007/wiki2 8 c9
Topic 8 : Overloading Vs Overriding
Overloading vs. overriding. Skrien delineates the difference between overloading and overriding in Section 2.8. He does this in the context of Java. How do other languages make this distinction, especially those like CLOS that define multi-methods?
Polymorphism
Polymorphism is usually expressed by the phrase “One interface, multiple methods”. This allows a super class to specify methods that will be common to all of its subclasses, while allowing the subclasses to define their own specific methods.
It means design a generic interface and use it for group of related activities. This helps reduce complexity by allowing the same interface to be used to specify a general class of action. It is the compiler’s job to select the specific action (that is, method ) as it applies to each situation.
Overloading
In Java it is possible to define 2 or more methods within the same class that share the same name, as long as their parameter declarations are different. The methods are said to be overloaded. This process is referred as method overloading. It is one of the way by which java implements polymorphism.Java uses the type and /or number of arguments to determine which of the overloaded methods to be overloaded. The overloaded methods may differ in return type or the number of parameters in the method call.
Example
class Overload{ void show() { System.out.println(“ There are no parameters in this method”); } void show(int a) { System.out.println(“this has one parameter : a” +a); } Void show(int a,int b){ System.out.println(“this has 2 parameters a”+a+ “b:”+b); } Double show(double a){ System.out.println(“this has a double parameter a”+a); Return a*a } } Class overloadtest { Public static void main(String args[]){ Overload obj=new Overload(); Double result; Obj.show(); Obj.show(10); Obj.show(10,20); Result=obj.show(100.5); System.out.println(“result of obj.show(100.5) is” + result); } }
Output
There are no parameters in this method
this has one parameter : a 10 this has 2 parameters a 10 b 20 this has a double parameter a 100.5 the result of obj.show(100.5) is 10100.25
Overriding
Overriding occurs only with respect to inheritance and occurs when a subclass has a method with the same signature as a parent's method. The method in the subclass is said to override the method in the superclass. Java always invokes the most derived viewable version of a method based on the scope of the present reference. However , if we wish to access superclass version of overridden method, then we can use the keyword “super” and then access it.
Example
Class Figure { Double length; Double breadth; Figure(double a, double b) { Length =a; Breadth=b; } Double area(){ System.out.println(“area for figure is undefined”); Return 0; } } Class rectangle extends Figure { Rectangle (Double a, double b) { Super(a,b); } // override the area for rectangle Double area() { System.out.println(“inside area for rectangle”); Return length* breadth } } Class triangle extends figure{ Triangle (double a,double b) { Super(a,b); } // override area for triangle Double area() { System.out.println(“inside area of triangle”); Return length*breadth /2; } } Class areastest{ Public static void main(String args[]){ Figure obf=new figure(10,10); Rectangle obr=new rectangle(25,50); Triangle obt=new triangle(20,40); Figure ref; Ref=obr; System.out.println(“area is”+ ref.area()); Ref=obt; System.out.println(“area is”+ ref.area()); Ref=obf; System.out.println(“area is”+ ref.area()); } }
Output Inside area for rectangle Area is 1250 Inside area of triangle Area is 400 Area for figure is undefined Area is 0
Overloaded | Overridden |
supplements each other | replaces the method it overrides |
can exist in any number within same class | Each method in a parent class can be overridden at most once in any one class |
must have different arguments | must have argument list of identical type and order |
return type may be freely chosen | return type must be identical |
determined at compile time | determined at run time |
Note: Overloaded methods should be used sparingly, as they can make code much less readable.