Interfaces and Abstract Classes
In Chapter 9, we learned about another core pillar of OOP, namely inheritance. We saw that Java uses the extends
keyword to define an “is-a” inheritance relationship between the child and the parent class. The subclass inherits functionality from its parent that enables code reuse, a core benefit of inheritance. Java prevents multiple class inheritance by ensuring you can only extend from one class at a time.
We also took a deep dive into the other remaining pillar of OOP, polymorphism. Polymorphism is enabled by subclasses overriding the parent class instance methods. We saw that, regarding the hierarchy, references can point (across) to objects of their own type and (down) to subclass objects. An exception occurs if a reference attempts to point (up) to parent objects in the hierarchy.
Next, we compared and contrasted method overloading and method overriding. In method overriding, the method signatures must match (except for covariant...