Introduction to OOP: Chapter 12: Implications of Inheritance
Covariance and Contravariance
An argument that is made more general is said to be covariant.
An argument that is made more restrictive is said to be contravariant.
Both can destroy the is-a relation, semantics of both are tricky, most
languages forbid both.
Intro OOP, Chapter 12, Slide 17