File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Java in General and the fly likes Doubt in Overloading Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Doubt in Overloading" Watch "Doubt in Overloading" New topic
Author

Doubt in Overloading

rajaraman navaneethan
Ranch Hand

Joined: Feb 26, 2005
Posts: 86
class sample {

void meth(sample s){
System.out.println("In Sample");
}

void meth(Object o){
System.out.println("In object");
}
void meth(String s){
System.out.println("In String");
}

}
public class test{
public static void main(String args[]){
new sample().meth(null);
}
}

Hi Friends,
The above program fails to compile and the compiler throws the following message.

"test.java:17: reference to meth is ambiguous, both method meth(sample) in sample
and method meth(java.lang.String) in sample match
new sample().meth(null);
^
1 error"

But if I declare a reference variable sample s=null or String s=null, the program complies.Can any one explain how this works?

regards,
Raja
Amit Biswas
Ranch Hand

Joined: Jun 01, 2006
Posts: 52
Hi Rajaraman,
The following statement in your main method creates ambiguity
new Sample().meth(null);

This is because null is not an instance of any class, the compiler cannot resolve which overloaded method to call to at compile time.

You can check this with the instanceof operator
null instanceof Sample // false
null instaneof Object //false
null instaceof String //false
In other words, null is not an instanceof any class. But null can be casted to any class you like.
That is the reason you get a NullPointerException with any object and can choose to return null from any method returning an object.

If you modify the above statement as any of the following:
new Sample().meth((Sample)null); //In Sample
new Sample().meth((Object)null); //In object
new Sample().meth((String)null); //In String
it will work.

Hope that was helpful!
Nitesh Kant
Bartender

Joined: Feb 25, 2007
Posts: 1638

Similar discussion here


apigee, a better way to API!
rajaraman navaneethan
Ranch Hand

Joined: Feb 26, 2005
Posts: 86
Hi Ashish,Nitesh,
thanks for yor replies.
regards,
Raja
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Doubt in Overloading