subtyping and more about object
variance
case class and pattern matching