} 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?
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.