Interface Semantics & Polymorphism: Leveraging the interface to write code whose behavior can change depending on the data being passed through