“协变”和“逆变”概念的含义是什么?
给定2个班级,Animal and Elephant(继承自Animal),我的理解是,如果您尝试将大象放入动物数组中,则会出现运行时错误,而发生这种情况是因为大象比动物“更大”(更具体)。但是您能否将一个 Animal 放入 Elephant 数组中,看看如何保证 Elephant 包含 Animal 属性?
你把它搞反了。您可以将大象添加到动物数组中,因为它is anAnimal,并且它保证具有 Animal 需要具有的所有方法。您不能将 Animal 添加到 Elephant 数组中,因为它确实not拥有大象需要具备的所有方法。
维基百科上的文章协变和逆变 http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)对此有一个很好的解释:
在编程语言的类型系统中,如果从类型到类型的运算符保留类型的排序 ≤(将类型从更具体的类型排序到更通用的类型),则该运算符是协变的;如果它颠倒了这个顺序,它就是逆变的。如果这些都不适用,则运算符是不变的。这些术语来自范畴论。
另外,你说 Elephant 类型“更大”,但事实并非如此。动物类型“更大”,因为它包括更具体的类型,例如大象、长颈鹿和狮子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)