Java教程

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

本文主要是介绍【有关java协变逆变的研究】看完这个你就明白50%了,不明白的话我会对你负责任的。(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

什么是协变和逆变?

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

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

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

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

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

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

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

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

这篇关于【有关java协变逆变的研究】看完这个你就明白50%了,不明白的话我会对你负责任的。(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!