面向对象之 协变逆变
协变
就是协着变,跟着变,我跟你变,你怎么变我怎么变。
逆变
就是逆着变,反着变,你变我也变,但我跟你变的相反
从中看到有几个要素
你
变
我
跟着变
来个数学例子
y=x
在坐标系上是一条东北到西南的直线
你是x
我是y
x变大
y跟着变大
所以y对于x是协变的
y其实是x的一种函数关系
y随着x变大是因为要维持这种函数关系
来个物理例子
矢量
矢量由坐标分量和坐标上的基的乘积来表示
基就比如数量单位,方向单位
分量表示以基为单位的长度,有多少个基
这里的几个元素是: 矢量,坐标系,坐标分量,基
这几个元素的关系是怎么样的呢
坐标系变化了,其实也就是基变换了,不论是方向还是单位
对于同一个矢量来说
参考的坐标系的基变化了,分量肯定要变化,而且是逆变的,才能保证此矢量不变,不管基于何种坐标系
所以
对于坐标系而言
基是协变的基
分量是逆变的分量
矢量在这里的作用
就像上面例子里面的函数关系
它在这里就是一个标杆
不管你们怎么变
必须确保我是不变的
变
是因为不变
维持函数关系不变,不管x怎么变大,总有协变的y来维持关系维持规律
维持物体本身不变,不管参考系如何变化,因为有逆变分量的中和
顺着变的是协变
为了阻止变,扭转变从而达到不变的,是逆变
现在开始看协变逆变在程序里怎么体现
也就是一个实体的类型变了
然后带来的协变和逆变
实体的类型变换就是子类父类的相互转换
比如里氏变换
在任何场景下
子类型可以安全的转换成父类型
//TODO:
1,引用二中的引入与总结
2,引用三中的引入与总结
3,引用四中的引入与总结
4,里氏变换?
【暑假科普VII】协变性,协变与逆变
一句话清晰总结协变和逆变