Method ambiguity
posted 13 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
Hello,
Can anyone tell me why 'ss' and not 'oo' is printed after below code's execution
Can anyone tell me why 'ss' and not 'oo' is printed after below code's execution
Thanks,
Pramod
posted 13 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
It is because you are sending a String as an argument (test), so the method that takes the string parameter will be the one that gets called, hence will print oo.
posted 13 years ago
-
3 -
-
Number of slices to send:Optional 'thank-you' note:
-
-
The rules about overloading are not easy to understand; look at the §15.12 link in that page I quoted. As an over‑simplification, if there are two alternatives, the compiler chooses the “more specific” parameter type. So String takes precedence over Object because it as a sub-class and therefore more specific.
posted 13 years ago
That is correct , first complier or jvm (not sure) chooses method that has more speific parameter as argument if it doesn't matches than it chooses next alternativei.e next paramenter in which argumanet can be fit
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
Campbell Ritchie wrote:The rules about overloading are not easy to understand; look at the §15.12 link in that page I quoted. As an over‑simplification, if there are two alternatives, the compiler chooses the “more specific” parameter type. So String takes precedence over Object because it as a sub-class and therefore more specific.
That is correct , first complier or jvm (not sure) chooses method that has more speific parameter as argument if it doesn't matches than it chooses next alternativei.e next paramenter in which argumanet can be fit
Campbell Ritchie
Marshal
Posts: 81619
593
posted 13 years ago
-
1 -
-
Number of slices to send:Optional 'thank-you' note:
-
-
Overloading: version chosen by compiler at compile time.
Overriding: version chosen by JVM at run-time.
Overriding: version chosen by JVM at run-time.
posted 13 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
Thanks Campbell.
This question was asked in an interview and the interviewer said that the compiler will throw an error due to ambiguity.
This question was asked in an interview and the interviewer said that the compiler will throw an error due to ambiguity.

Thanks,
Pramod
Campbell Ritchie
Marshal
Posts: 81619
593
posted 13 years ago
Why didn’t you say it was an interview question? I thought it was a real-life question
-
1 -
-
Number of slices to send:Optional 'thank-you' note:
-
-
You’re welcomepramod talekar wrote:Thanks Campbell.
This question was asked in an interview . . .
Why didn’t you say it was an interview question? I thought it was a real-life question

posted 13 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
I replicated it in real time and found no ambiguity [:-p]
Thanks,
Pramod
posted 13 years ago
The ambiguity will come only when you call the method with a null literal.
Please note that it has to be the literal. Even passing a null String reference will enable compiler to select the right method (and hence it will not report any problem).
Lastly, sorry for being too finicky (programmer's brain's OCD), but "compiler will throw an error" does not make sense at all. Compiler can only report compilation problems. It can not throw any Error or Exception.
-
1 -
-
Number of slices to send:Optional 'thank-you' note:
-
-
pramod talekar wrote:This question was asked in an interview and the interviewer said that the compiler will throw an error due to ambiguity.
The ambiguity will come only when you call the method with a null literal.
Please note that it has to be the literal. Even passing a null String reference will enable compiler to select the right method (and hence it will not report any problem).
Lastly, sorry for being too finicky (programmer's brain's OCD), but "compiler will throw an error" does not make sense at all. Compiler can only report compilation problems. It can not throw any Error or Exception.
posted 13 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
Thanks Aditya.
Even if I pass in 'null' and run the program in Eclipse, it prints ss and not oo.
If I put in a String literal with null value, still it prints ss.
Only when I comment out the String argument method, it prints oo.
Does running the program through command line print something different ?
Even if I pass in 'null' and run the program in Eclipse, it prints ss and not oo.
If I put in a String literal with null value, still it prints ss.
Only when I comment out the String argument method, it prints oo.
Does running the program through command line print something different ?
Thanks,
Pramod
posted 13 years ago
-
-
Number of slices to send:Optional 'thank-you' note:
-
-
When you invoke an overloaded method, the compiler tries to find which of these methods is "closer" (or more specific, as Campbell already mentioned) to the arguments that you are passing. So when you are passing null as argument, the compiler is thinking: "Hmmmm, he gave me a null argument and I have a method that accepts a String and an Object. String is more specific that Object, so I will invoke the method that accepts String as an argument."
For instance, try to execute the following program:
The output will be:
1)ss
2)oo
3)oo
Result 1) comes from the invocation of the aa(String s) and 3) from the aa(Object o). The compiler tried to find the most specific method related to the arguments. The same applies to result 2) where we have an Intreger as an argument. The most specific method that can be found is aa(Object o) -- remember that an Integer is not a String but it is an Object --. As an exercise, try to experiment with different methods and arguments. For example, can you find what will be printed when we execute the following program? (try to guess before you run it and see the actual results)
For instance, try to execute the following program:
The output will be:
1)ss
2)oo
3)oo
Result 1) comes from the invocation of the aa(String s) and 3) from the aa(Object o). The compiler tried to find the most specific method related to the arguments. The same applies to result 2) where we have an Intreger as an argument. The most specific method that can be found is aa(Object o) -- remember that an Integer is not a String but it is an Object --. As an exercise, try to experiment with different methods and arguments. For example, can you find what will be printed when we execute the following program? (try to guess before you run it and see the actual results)
| Would anybody like some fudge? I made it an hour ago. And it goes well with a tiny ad ... The new gardening playing cards kickstarter is now live! https://www.kickstarter.com/projects/paulwheaton/garden-cards |







