Summary
In this chapter, you learned what happens under the hood when a method receives an argument of an interface type. We worked with methods that received arguments of interface types and we downcasted with interfaces and classes. We understood how we could treat an object as an instance of different compatible types and what happens when we do this. JShell allowed us to easily understand what happens when we use typecasting.
We took advantage of default methods in interfaces. We could add a new method to an interface and provide a default implementation to avoid breaking existing code that we couldn't edit.
Now that you have learned advanced scenarios in which we worked with interfaces, we are ready to maximize code reuse with generics in Java 9, which is the topic we are going to discuss in the next chapter.