类型：class CatShelter extends AnimalShelter {主流的面向对象语言中, Java和C++允许返回值协变，C#不支持。添加返回值协变是1998年C++标准委员会最先允许的对C++语言核心的修改之一。 Scala和D语言也支持返回值协变。
方法参数的逆变.类似地，子类重写的方法接受更宽的类型也是类型安全（type safe）的：class CatShelter extends AnimalShelter {允许参数逆变的面向对象语言并不多