Win a copy of Java 9 Modularity: Patterns and Practices for Developing Maintainable Applications this week in the Java 9 forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

overloading vs overriding  RSS feed

 
preeti khane
Ranch Hand
Posts: 93
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
this was previously posted by samy venkat...I want clarification on how the methods were chosen


My assumptions are
Class A has 3 overloaded methods...
Class B has 2 overloaded methods m1(A a) and m1(C c) that it inherits from A and 1 overidden method m1(B b)
Class C has 1 method inherited from A, 1 method inherited from B and 1 overidden method in C
So what happens at line 1 and line 2
 
La Vish
Ranch Hand
Posts: 161
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
line 1: c1 is of type A and class A has a method m1 which takes parameter of type A- void m1(A a); Now c2 is also of type A therefore c.m1(C2) matches the method void m1(A a);compiler then looks to see if this method has been overridden down the tree.Nope! so print AA.
Line 2: C1 is again type A but b1 is of type b.We have a matching method in class A -void m1(B b)!But hang on a sec..this is overridden in the child class B.. we have a method there too called void m1(B b).Is this further overridden down the tree too?No. Ok then print B as per this method in Class B.
Job finished.
 
Anupam Sinha
Ranch Hand
Posts: 1090
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Preeti
At line 1 class C's method is being invoked as it has inherited that method from A. Or you can simply say that class A's method is being invoked. On line class C's method is being invoked which it inherited from B. Though B also inherited the method from A but now that B has overriden it B's method would be inherited by class C. So basically its class C's method that are being invoked.
 
Kaz Yosh
Ranch Hand
Posts: 63
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,
c1.m1(c2); // line 1
c1.m1(b1); // line 2
On line 1, c1 is an instance of type A which has an actual object of C. c1 calls method named m1. Class A, B and C all have method m1. Differences are arguments. m1 in class A has all variety of arguments. m1 in class B has argument of type B. m1 in class C has an argument of type C. Since line 1 is passing an arugument of type A, only possible method that can respond to is m1 in class A.
On line 2, c1 is again type A of object C. The argument passed is b1, which is an instance of type B that has actual object of B. So when you look at the arguments list, there are two m1 methods that accept type B object. Ones in class A and ones in class B. Which one to choose? Since m1 method in class B has exactly same name and argument type as that of class A, m1 in B is overriding m1 in A. Thus, it choose m1 in class B.
Therefore out put should be AA,B.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!