, 我们可以让 和 具有什么类型？
返回值的协变.在允许协变返回值的语言中, 子类可以重写 方法来返回一个更窄的类型：class CatShelter extends AnimalShelter {主流的面向对象语言中,Java和C++允许返回值协变，C#不支持。添加返回值协变是1998年C++标准委员会最先允许的对C++语言核心的修改之一。 Scala和D语言也支持返回值协变。
方法参数的逆变.类似地，子类重写的方法接受更宽的类型也是类型安全（ty