概念'协方差'和'逆变'是什么意思?
给出了两个类,动物和大象(继承自Animal),我的理解是,如果你试图将一只大象放入一系列动物中,你会得到一个运行时错误,这是因为大象"更大"(更多)特定的)比动物.但是你可以将动物放入大象阵列中,看看大象如何保证包含动物属性吗?
你倒退了.您可以将一个Elephant添加到Animal数组中,因为它是一个 Animal,并且它保证拥有Animal所需的所有方法.您不能将动物添加到大象阵列,因为它并没有具备所有这些大象需要有方法.
关于协方差和逆变的维基百科文章对此有一个很好的解释:
在编程语言的类型系统中,从类型到类型的运算符是协变的,如果它保留类型的排序,≤,类型从更具体的类型到更通用的类型.如果它颠倒了这种顺序,它就是逆变的.如果这些都不适用,则运算符是不变的.这些术语来自类别理论.
另外,你说大象的类型"更大",事实并非如此.类型动物是"更大"的,因为它包含更具体的类型,如大象,长颈鹿和狮子.