Hi All, I was keep exploring the solution for this problem and later I found that is due to charecteristic of Overloading-Widening/Boxing.
Here is rule: "In every case, when Exact match is not found, the JVM uses the method with the SMALLEST argument which is Wider then the Parameter. So when we pass Null as parameter, JVM will look for the method which has next higher level of Argument and it find that CAT is Child of Animal and smaller then Animal so it calls method Add from Cat class. Thanks, Abhishek On Thu, Feb 16, 2012 at 11:33 PM, Asher Fawad <[email protected]> wrote: > To tell you the truth, your code is very complex. There is no clarity > in there. If you want to learn something, learn it simply. > > You should define Animal as a separate class with proper method > overloading (same method with different arguments). Put main method into a > class of its own. > > I also don't see the purpose of sending arguments like "Cat c" or "Dog d" > when you aren't even using it. > > What do you expect an.child(null) to print??? Of course, it might only > print "Animal" (I think it shouldn't print anything). > > Your method declaration--> void child(Animal a){System.out.println(" > Animal");} > should be rewritten as [ void child(){System.out.println("Animal");} > > and your function call an.child(null) should be [an.child()] > > Advice: > > Rewrite your program with more clarity and simplicity and then tell if you > face same problem. > > --- On *Wed, 2/15/12, ABHISHEK TRIPATHI <[email protected]>* wrote: > > > From: ABHISHEK TRIPATHI <[email protected]> > Subject: [jpassion_java] Overloaded method > To: "JPassion.com: Java Programming" <[email protected]> > Date: Wednesday, February 15, 2012, 11:04 PM > > Hi, > Can you plz tell why output is coming as Cat not Animal? > Also if I un-comment all lines, I get compile time error. > > thanks > Abhi > > *********************************** > package Overload; > public class Animal { > > // void child(Dog d) {System.out.println(" Dog");} > void child(Cat c){System.out.println(" Cat");} > void child(Animal a){System.out.println(" Animal");} > // void child(Mouse m){System.out.println(" Mouse");} > // private void child(Cat x){} > > public static void main(String[] args) { > Animal an=new Animal(); > an.child(null); > } > } > ************ > class Dog extends Animal{} > class Cat extends Animal{} > class Mouse extends Dog{} > > > -- > You received this message because you are subscribed to the Google Groups > "JPassion.com: Java Programming" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/jpassion_java?hl=en. > > -- You received this message because you are subscribed to the Google Groups "JPassion.com: Java Programming" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/jpassion_java?hl=en.
