几句话告诉你 什么是协变 什么是逆变 看不懂你来打我

讲协变和逆变的前提是: 里氏替换原则---“子类可以在程序中代替父类,并保证类型安全”。

那 啥样的子类才可以安全的表示其父类呢??

  对于接口和对象来说,子类如果想安全的代表其父类 必须加更多的属性限制才行。例如 "六年级一班25岁的初中生小明" 可以代表 ”人类“ 。从抽象到具体的变化,让子类安全的表示了父类,这种越来越具体范围越来越小的变化 俺们叫它 协变!!

  但是 对于函数的参数来说恰恰相反。如果一个函数要接收 "人类 " 作为入参,(所有人类能做的事情都要在这个函数中实现)!!那么 我们传什么给它才能完全满足,参数里必须包含 "人类"的要求呢,当然 传入的参数要比 "人类" 大或者和 "人类" 一样才能满足要求,因为这个函数要做所有人类能做的事情(最终决定把 '生物‘ 作为参数)。这种范围越大越安全的表示方式 俺们叫他逆变。

  生活中有哪些逆变的例子呢?最典型的就是 追女朋友。假如你女朋友只要求你能陪在她身边 她以后就嫁给你。那么你该怎么做呢?就只陪在她身边吗?当然不是!!!你给的 应该比她期望的多,除了陪在她身边,你还要打工赚钱 遇事能帮她抗有责任有担当。你给的范围远远大于她的要求,这样你才安全 不会被第三者轻易插足。这种范围越大越安全的情形 就是逆变!!!

 

posted @   方方面  阅读(253)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示