There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply () below.
If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.
Join the Discussion. Help a fellow learner on their journey.
Ask or answer a question about this exercise by clicking reply () below!
You can also find further discussion and get answers to your questions over in Language Help.
Agree with a comment or answer? Like () to up-vote the contribution!
I hardly take anything in from this course so far (unlike with the Learn Java course). What is creating a “new Retriever”? It’s not a regular class, it’s an interface that simply allows your to “inherit” empty methods from it (I’d like to add that it has never been clearly explained by Codecademy why one may need any interfaces in the first place, let alone generic ones). Why is an interface now used to create objects all of a sudden? Folks at Codecademy, you should definitely rewrite the Learn Intermediate Java course from scratch, it’s a disgrace, frankly (not to mention silly mistakes like “it’s” instead of “its”, etc.)
hah You are not alone. Feeling exactly the same way.
Why would I implement interface if rewrite it?
The program seem perfectly works without this.
And yeah, This is first time when interfaces being explaned
I cannot say yet, that the course need to be rewritten. Serialization was okay, I finished my project after that.
But with Interfaces I am frustrated Hope it will be understood later
This course is correct. I would rate this higher than the second step after a first course in Java and the basics of Interfaces and Object-Oriented Principles as prerequisite.
I struggle to get the jargon correct when I explain Java, I will try though:
The reason to assign the object to Interface is a Polymorphism utility: since only the retrieveData method is called, it turns out only the Retriever Interface methods are used.
What can happen with this design pattern is that you could later change the instantiated object to be a different class that also implements Retriever (with the same generic type) and the rest of the code would stay the same; thus getting us the Object-Oriented GAINZ of open-closed principle in a Java container-framework like Spring: only the dependency is updated and the Autowired classes are “closed” to updates.
TL;DR Polymorphism and Open-Closed principle are why to use Interfaces this way.
I struggle to simplify my answer and that is why I chalk this up to difficulty: this is really advanced usage of Interface.
As usual, codecademy is introducing difficult subjects with correct best-practices and highlighting some simple parts for us to memorize: learning about placing the generic syntax correcly which is being carefully explained.