• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Liutauras Vilda
  • Campbell Ritchie
  • Tim Cooke
  • Bear Bibeault
  • Devaka Cooray
Sheriffs:
  • Jeanne Boyarsky
  • Knute Snortum
  • Junilu Lacar
Saloon Keepers:
  • Tim Moores
  • Ganesh Patekar
  • Stephan van Hulst
  • Pete Letkeman
  • Carey Brown
Bartenders:
  • Tim Holloway
  • Ron McLeod
  • Vijitha Kumara

overloading vs overriding  RSS feed

 
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
 
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.
 
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.
 
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.
 
Consider Paul's rocket mass heater.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!