Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Java
Expertise: Intermediate
Mar 27, 2000



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Resolution of Overloaded Functions

Let's say we have an overloaded function called fun():
void fun(string) { system.out.println("String"); }
void fun(int) { system.out.println("Int"); }
void fun(double) { system.out.println("Double"); }
void fun(float) { system.out.println("float"); }
If we call fun(37) how does the system choose which function to execute? Basically it chooses based on type conversions. The parameter 37 is an [int]eger and may be converted to a [double] or [float] by "widening", but cannot be converted to a [string], so fun(string) is not executed.

Choosing between the last 3 is a bit more tricky: The system will choose the type which can be most easily converted into the other two (i.e: via widening). An [int] can be widened into both [float] and [double]; A [double] can be widened into a [float] but cannot be converted to an [int]; A [float] cannot be converted to either. Thus fun(int) will be chosen.

Basically, any invocation of fun(int); can be handled by both fun(double); and fun(float);
Take another example:
void fun(int, double) { }
void fun(double, int) { }
And fun(1,2); is called. The system will drop an ambiguity error, since it won't know what to do here.

Understanding this mechanism is all well and fine, but it is not advisable to overload a function with types like [int] and [double] since it starts getting tricky and logical errors may start coming in.
Jeremy Chen
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date