Allows for considering multiple different implementations of the same interface.
For example, a car can have several different types of engine and one transmission.