Polymorphism enables programs to be developed so that objects from different classes can define methods that share the same name
Dynamic typingdefers the determination of the class that an object belongs to until the program is executing.
Dynamic binding defers the determination of the actual method to invoke on an object until program execution time.