This document defines polymorphism and describes its two types - compile-time and run-time polymorphism. Compile-time polymorphism is demonstrated through method overloading examples, while run-time polymorphism is demonstrated through method overriding examples. The key advantages of polymorphism are listed as code cleanliness, ease of implementation, alignment with real world scenarios, overloaded constructors, and reusability/extensibility.