ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【有关java协变逆变的研究】看完这个你就明白50%了,不明白的话我会对你负责任的。(一)

2022-03-21 10:30:06  阅读:150  来源: 互联网

标签:java 逆变 子类 50% 动物 协变 父类 动物医院


什么是协变和逆变?

协变就是如果A是B的子类,则X<A>就是说X<B>的子类

逆变就是如果A是B的子类,反而Y<A>成为了Y<B>的父类

上面的定义非常抽象,说一个具体的例子吧,就拿猫来说,按照我们平时的逻辑,猫是动物,也就是说猫是动物的子类,当你说你想养动物的时候,养了猫就算是实现了愿望,而当你说你想养猫的时候,你养了一只动物并不能确定你的愿望是否实现。

这个就是一个设计原则的思想,叫做里式替换原则,子类可以代替父类,因为子类继承了父类已有的东西,子类还实现了父类没有实现的内容,甚至子类还可以拥有自己的想法,修改父类的东西,简直就是把父类拍在了沙滩上。

言归正传,那就继续用猫来解释一下协变,正常世界里,猫是动物的子类,上面已经讨论过了。在我家里,猫也是动物,也就是说我家的猫是我家的动物,将猫套上了我家这个外壳,猫和动物的关系依旧没有改变,这个就是协变。

 讨论完协变在来讨论逆变,这个就有些变态了,而且需要好好思考一下,还继续用猫来解释,有两家兽医院,一家是猫医院(专门治猫),一家是动物医院(专门治动物),当你家猫生病了,两家医院都能去,但是当你家狗生病了,却只能去动物医院,从这点来看,动物医院可以代替猫医院,动物医院不仅有了猫医院治猫的方法,还拥有自己治疗其他动物的方法,从这点来看,动物医院是猫医院的子类,猫本来是动物的子类,但是套上了医院的外壳,猫医院倒反天罡逆转成为动物医院的父类,这个就是逆变。

 但是,并不是套上外壳就必须不是逆变就是协变,比如埃及的猫,在埃及就是埃及的神,套上了埃及之后,埃及的猫和埃及的动物就是两个完全没有关系的对象,这个就叫做不转化,而逆变和协变就是转化,什么转化?当然是继承转化啦。

好了,讨论了一大推什么是协变什么逆变,那为什么要有协变逆变呢?我们下一节再继续讨论。

标签:java,逆变,子类,50%,动物,协变,父类,动物医院
来源: https://blog.csdn.net/z449077880/article/details/123628836

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有