Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
54 views

Method Overloading in Java With Examples

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
54 views

Method Overloading in Java With Examples

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 28

Home All Tutorials Core Java OOPs Collections Java I/O JSON DBMS

Method Overloading in Java with examples Search this website


BY CHAITANYA SINGH | FILED UNDER: OOPS CONCEPT

Method Overloading is a feature that allows a class to have more than one method having the same
name, if their argument lists are different. It is similar to constructor overloading in Java, that allows
a class to have more than one constructor having different argument lists.

let’s get back to the point, when I say argument list it means the parameters that a method has: For
example the argument list of a method add(int a, int b) having two parameters is different from the
argument list of the method add(int a, int b, int c) having three parameters.

Three ways to overload a method


In order to overload a method, the argument lists of the methods must differ in either of these:
1. Number of parameters.
For example: This is a valid case of overloading

add(int, int)
add(int, int, int)
2. Data type of parameters.
For example:

add(int, int)
add(int, float)

3. Sequence of Data type of parameters.


For example:

add(int, float)
add(float, int)

Invalid case of method overloading:


When I say argument list, I am not talking about return type of the method, for example if two
methods have same name, same parameters and have different return type, then this is not a valid
method overloading example. This will throw compilation error.

int add(int, int)


float add(int, int)

Method overloading is an example of Static Polymorphism. We will discuss polymorphism and types
of it in a separate tutorial.

Points to Note:
1. Static Polymorphism is also known as compile time binding or early binding.
2. Static binding happens at compile time. Method overloading is an example of static binding
where binding of method call to its de nition happens at Compile time.

Method Overloading examples


As discussed in the beginning of this guide, method overloading is done by declaring same method
with different parameters. The parameters must be different in either of these: number, sequence or
types of parameters (or arguments). Lets see examples of each of these cases.

Argument list is also known as parameter list

Example 1: Overloading – Different Number of parameters in argument list


This example shows how method overloading is done by having different number of parameters

class DisplayOverloading
{
public void disp(char c)
{
System.out.println(c);
}
public void disp(char c, int num)
{
System.out.println(c + " "+num);
}
}
class Sample
{
public static void main(String args[])
{
DisplayOverloading obj = new DisplayOverloading();
obj.disp('a');
obj.disp('a',10);
}
}

Output:

a
a 10

In the above example – method disp() is overloaded based on the number of parameters – We have
two methods with the name disp but the parameters they have are different. Both are having
different number of parameters.

Example 2: Overloading – Difference in data type of parameters


In this example, method disp() is overloaded based on the data type of parameters – We have two
methods with the name disp(), one with parameter of char type and another method with the
parameter of int type.

class DisplayOverloading2
{
public void disp(char c)
{
System.out.println(c);
}
public void disp(int c)
{
System.out.println(c );
}
}

class Sample2
{
public static void main(String args[])
{
DisplayOverloading2 obj = new DisplayOverloading2();
obj.disp('a');
obj.disp(5);
}
}

Output:

a
5

Example3: Overloading – Sequence of data type of arguments


Here method disp() is overloaded based on sequence of data type of parameters – Both the methods
have different sequence of data type in argument list. First method is having argument list as (char,
int) and second is having (int, char). Since the sequence is different, the method can be overloaded
without any issues.

class DisplayOverloading3
{
public void disp(char c, int num)
{
System.out.println("I’m the first definition of method disp");
}
public void disp(int num, char c)
{
System.out.println("I’m the second definition of method disp" );
}
}
class Sample3
{
public static void main(String args[])
{
DisplayOverloading3 obj = new DisplayOverloading3();
obj.disp('x', 51 );
obj.disp(52, 'y');
}
}

Output:

I’m the first definition of method disp


I’m the second definition of method disp

Method Overloading and Type Promotion


When a data type of smaller size is promoted to the data type of bigger size than this is called type
promotion, for example: byte data type can be promoted to short, a short data type can be
promoted to int, long, double etc.
What it has to do with method overloading?
Well, it is very important to understand type promotion else you will think that the program will
throw compilation error but in fact that program will run ne because of type promotion.
Lets take an example to see what I am talking here:

class Demo{
void disp(int a, double b){
System.out.println("Method A");
}
void disp(int a, double b, double c){
System.out.println("Method B");
}
public static void main(String args[]){
Demo obj = new Demo();
/* I am passing float value as a second argument but
* it got promoted to the type double, because there
* wasn't any method having arg list as (int, float)
*/
obj.disp(100, 20.67f);
}
}

Output:

Method A

As you can see that I have passed the oat value while calling the disp() method but it got
promoted to the double type as there wasn’t any method with argument list as (int, oat)

But this type promotion doesn’t always happen, lets see another example:

class Demo{
void disp(int a, double b){
System.out.println("Method A");
}
void disp(int a, double b, double c){
System.out.println("Method B");
}
void disp(int a, float b){
System.out.println("Method C");
}
public static void main(String args[]){
Demo obj = new Demo();
/* This time promotion won't happen as there is
* a method with arg list as (int, float)
*/
obj.disp(100, 20.67f);
}
}

Output:

Method C

As you see that this time type promotion didn’t happen because there was a method with matching
argument type.
Type Promotion table:
The data type on the left side can be promoted to the any of the data type present in the right side
of it.

byte → short → int → long


short → int → long
int → long → float → double
float → double
long → float → double

Lets see few Valid/invalid cases of method overloading


Case 1:
int mymethod(int a, int b, float c)
int mymethod(int var1, int var2, float var3)

Result: Compile time error. Argument lists are exactly same. Both methods are having same number,
data types and same sequence of data types.

Case 2:

int mymethod(int a, int b)


int mymethod(float var1, float var2)

Result: Perfectly ne. Valid case of overloading. Here data types of arguments are different.

Case 3:

int mymethod(int a, int b)


int mymethod(int num)

Result: Perfectly ne. Valid case of overloading. Here number of arguments are different.

Case 4:

float mymethod(int a, float b)


float mymethod(float var1, int var2)

Result: Perfectly ne. Valid case of overloading. Sequence of the data types of parameters are
different, rst method is having (int, oat) and second is having ( oat, int).

Case 5:

int mymethod(int a, int b)


float mymethod(int var1, int var2)
Result: Compile time error. Argument lists are exactly same. Even though return type of methods are
different, it is not a valid case. Since return type of method doesn’t matter while overloading a
method.

Guess the answers before checking it at the end of programs:


Question 1 – return type, method name and argument list same.

class Demo
{
public int myMethod(int num1, int num2)
{
System.out.println("First myMethod of class Demo");
return num1+num2;
}
public int myMethod(int var1, int var2)
{
System.out.println("Second myMethod of class Demo");
return var1-var2;
}
}
class Sample4
{
public static void main(String args[])
{
Demo obj1= new Demo();
obj1.myMethod(10,10);
obj1.myMethod(20,12);
}
}

Answer:
It will throw a compilation error: More than one method with same name and argument list cannot
be de ned in a same class.

Question 2 – return type is different. Method name & argument list same.
class Demo2
{
public double myMethod(int num1, int num2)
{
System.out.println("First myMethod of class Demo");
return num1+num2;
}
public int myMethod(int var1, int var2)
{
System.out.println("Second myMethod of class Demo");
return var1-var2;
}
}
class Sample5
{
public static void main(String args[])
{
Demo2 obj2= new Demo2();
obj2.myMethod(10,10);
obj2.myMethod(20,12);
}
}

Answer:
It will throw a compilation error: More than one method with same name and argument list cannot
be given in a class even though their return type is different. Method return type doesn’t matter in
case of overloading.

❮ Previous Next ❯
Comments

sirisha says
AUGUST 27, 2014 AT 3:56 PM

Very clear. Excellent examples. Thanks a lot

Reply

sweety says
OCTOBER 13, 2014 AT 6:38 PM

Thanks.. very good and easy to understand

Reply

Syed Munir Uddin says


OCTOBER 23, 2014 AT 1:42 PM

Excellent Example keep it up and thanks :-)

Reply
vishal says
NOVEMBER 13, 2014 AT 3:45 PM

very clear….

Reply

prerana says
NOVEMBER 13, 2014 AT 9:40 PM

The examples helped very much. The examples were clear, and to the point. Great
explanation. :D

Reply

Mayur says
JANUARY 4, 2015 AT 9:12 AM

Very well presentation. Thanks a lot.

Reply

Leesa says
JANUARY 28, 2015 AT 3:56 PM

The case 4-
oat mymethod(int a, oat b)
oat mymethod( oat var1, int var2)
causes a compilation error due to implicit method invocation datatype conversion.
Please check ..

Reply

Shipra says
JUNE 15, 2016 AT 11:27 AM

that’s right

Reply

hayenadeblue says
NOVEMBER 23, 2016 AT 12:30 PM

I think what is written in the article is correct. Don’t understand why Shipra agrees.

Reply

Rajan Gupta says


FEBRUARY 8, 2017 AT 7:05 PM
This is throwing compilation error because you might be passing integer values
in both the methods…if you speci cally pass oat then this will not throw
compilation error
Something like this:
mymethod(1.0f, 10);
mymethod(1, 10.0f);
I hope this helps.

Reply

Noah says
MARCH 6, 2015 AT 7:52 PM

There couldn’t be a more detailed and useful explanation of method overloading than
this.

Thank you!

Reply

chetan says
MARCH 10, 2015 AT 5:41 AM

You have described in well manner i like that your presentation way………….Please post
more on same way………:)Thanks

Reply

ANKUSH PAWAR says


JUNE 20, 2016 AT 11:25 AM

Thank you so much…simple and useful explanation

Reply

Kalhan says
MARCH 16, 2015 AT 4:58 PM

Thank you so much…simple and useful explanation

Reply

Suresh says
MARCH 28, 2015 AT 5:43 PM
Nice Example

Reply

Arpitha says
APRIL 9, 2015 AT 6:38 AM

Good Explanation :)

Thank you

Reply

surekha says
JULY 15, 2015 AT 9:48 AM

When should use dynamic binding..Please explain clearly..

Reply

sam says
JULY 16, 2015 AT 10:32 AM

HI,
In the below
Case 4:

oat mymethod(int a, oat b)


oat mymethod( oat var1, int var2)
Result: Perfectly ne. Valid case for overloading. Sequence of the data types are
different, rst method is having (int, oat) and second is having ( oat, int).
It will get ambiguity.

Reply

Aravind Reddy says


DECEMBER 2, 2015 AT 4:12 AM

Yes there is an ambiguity in case:4


Because int can be implicitly converted into oat.
So the compiler is in a confused state to which method it should bind to

Reply

Ganesh NB says
AUGUST 3, 2015 AT 11:24 AM
Great Explanation. Can u make it clear wheather java supports pass by reference.I know
its no. still the value are updated in the calling function. can you explain how it
occurs…?

Thank you in advance for the answer

Reply

saad ismail says


FEBRUARY 26, 2016 AT 7:27 PM

perfectly explain i,m loving it my all concepts are clear ….

Reply

Kemoji says
MARCH 1, 2016 AT 6:08 AM

Wonderful… Super cool stuff, made things easy…Thanks a Ton

Reply
Md Nehaluddin Haider says
MARCH 6, 2016 AT 5:16 AM

I tried reading many tutorials for OOPs and now I can say this is the best. Thank you so
much buddy for this wonderful tutorial.

Reply

Ankit says
APRIL 13, 2016 AT 9:57 AM

Best Example everything is clear..


Good Job

Thanks

Reply

Jeremiah Nji says


MAY 5, 2016 AT 1:11 PM

This was perfect! You explained it so clearly. Overloading is something I comprehend


completely now!

Thank you!
Reply

akshay says
JUNE 8, 2016 AT 6:20 PM

no one in our class taught me like this,


Its simply awesome…. just now started my course,
only by using your website only,
i planned to go through daily,
please help me for queries,

Reply

Luke says
JUNE 18, 2016 AT 1:50 PM

Very nice and uncomplicated way of explaining! Good job!!

Reply

Pankaj says
JUNE 20, 2016 AT 2:52 PM

your case 4 is not valid,


oat mymethod(int a, oat b)
oat mymethod( oat var1, int var2)

when we call them with values, it will throw an error like error: reference to print is
ambiguous h.print(10, 20);
cause both are taking int value, that’s why reference variable is getting confused while
selecting/calling them,

Reply

Kd says
JULY 6, 2016 AT 7:29 PM

Excellent notes on method overloading! Kudos!

Reply

pooja says
SEPTEMBER 12, 2016 AT 3:21 PM

The concepts are clear and easy to understand. thank you

Reply
venkat says
OCTOBER 2, 2016 AT 10:01 PM

F:javaprograms>javac TestOverloading3.java
F:javaprograms>java TestOverloading3
Error: Could not nd or load main class TestOverloading3
its compiling successfully ,but its showing error like this while run.
may i know why i am getting like this error

Reply

Shiva says
NOVEMBER 13, 2016 AT 7:07 PM

Method Overloading Concepts are very clearly understood and got registered in my
mind. Thanks a lot.

Reply

Deepanshu Jain says


NOVEMBER 23, 2016 AT 10:13 AM

Just wanted to add one more case :


If just return type is different !!
public double myMethod(int num1, int num2)
{
System.out.println(“First myMethod of class Demo”);
return num1+num2;
}
public oat myMethod(int var1, int var2)
{
System.out.println(“Second myMethod of class Demo”);
return var1-var2;
}

throw an error.

Reply

Rakesh Ranjan says


FEBRUARY 6, 2017 AT 11:33 AM

Already there in Question 2

Reply

Rajneesh Kaundal says


JANUARY 12, 2017 AT 1:04 PM

Explained very well, Anyone can understand :)


Reply

EDISON MUALA says


APRIL 1, 2017 AT 9:38 AM

Thank you so much.the notes are clear and easy to follow.please keep up doing the good
job, you have assisted me so much

Reply

sanad alteggaz says


JUNE 28, 2017 AT 11:41 PM

System.out.println(” thank you pro !!!”);

Reply

Himanshu Yadav says


JULY 12, 2017 AT 5:59 AM

Can we take input at compile time in case of method overloading •••••?With the help of
keyboard???

Reply
Leave a Reply
Your email address will not be published. Required elds are marked *

Comment

Name *

Email *

POST COMMENT

Java Tutorial
Java Index

Java Introduction

JVM - Java Virtual


Machine

First Java Program

Variables

Data Types

Operators

Java Control
Statements

Java If-else

Java Switch-Case

Java For loop

Java while loop

Java do-while loop

Continue statement

break statement

OOPs Concepts

OOPs Concepts

Constructor

Static keyword

Inheritance

Types of inheritance

Aggregation
Association

Super Keyword

Method overloading

Method overriding

Overloading vs
Overriding

Polymorphism

Types of
polymorphism

Static and dynamic


binding

Abstract class and


methods

Interface

Abstract class vs
interface

Encapsulation

Packages

Access modi ers

Garbage Collection

Inner classes

Static import

Static constructor

Java Interview Q

MORE ...
Java 8 Features

Java 9 Features

Java Conversion

Java String

Exception handling

Java Multithreading

Java I/O

Java Serialization

Java Regex

Java AWT

Java Swing

Java Enum

Java Annotations

Copyright © 2012 – 2020 BeginnersBook . Privacy Policy . Sitemap

You might also like