In the Shape class example, we had to have a draw method in the Shape class, even though we never used that
method, only the subclasses' overridden draw methods.
Java decides which method to use, in such cases, at execution time: dynamic method binding.
The paint method (that iterates through the Shape array) makes use of dynamic method binding.
Dynamic method binding is crucial to polymorphism.
It increases execution time overhead, but simplifies programming.