Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialOmar Carino
11,162 PointsWhy is the method being called from the interface instead of the implementation?
I'm a little confused as to why inside the save method of CategoryServiceImpl class we're calling the save method from the CategoryDao Interface. I thought (and I may be mistaken) that we get the methods from the implementation. So instead of the method save being called from the CategoryDao shouldn't have it been called from CategoryDaoImpl?
1 Answer
Boban Talevski
24,793 PointsThere are several things to understand here.
First and foremost, you simply can't call an interface method if it isn't implemented somewhere. Or to put it another way, a class that implements a certain interface must implement all methods from the said interface or the class won't compile. So, be sure that we are actually calling the implemented method in this case.
Now on to the details for this particular case. The CategoryDao object we have in the CategoryServiceImpl is Autowired to get an instance of a class implementing the CategoryDao interface, it can't instantiate an object of an interface. And it's the way Autowired works, put an interface as the type and then Spring looks for a class which implements that interface to instantiate the actual object from. The class which implements the particular interface also needs to be annotated with Repository (or any other Spring component). So, since there's only one such class, which is CategoryDaoImpl, the object we have is an instance of that particular class.
So what happens behind the scenes looks something like this:
CategoryDao categoryDao = new CategoryDaoImpl();
And when we call methods on that categoryDao object, we are actually calling the method implementations from CategoryDaoImpl.
Omar Carino
11,162 PointsThank you so much your answer really helped clear things up!
Boban Talevski
24,793 PointsYou are welcome. Glad it helped clear things up! :)
PJ Pollina
8,012 PointsPJ Pollina
8,012 PointsI haven't done that particular course on here so I'm not entirely sure, but I think it's a case of polymorphism? If you could post your code I might understand the context of the question better.