In this chapter, we will learn about one of the most exciting features of object-oriented programming in Java 9: polymorphism. We will code many classes and then we will work with their instances in JShell to understand how objects can take many different forms. We will:
Create concrete classes that inherit from abstract superclasses
Work with instances of subclasses
Understand polymorphism
Control whether subclasses can or cannot override members
Control whether classes can be subclassed
Use methods that perform operations with instances of different subclasses