Cat类继承了Animal类,有人会觉得,ArrayList<Cat>类相应的也会继承ArrayList<Animal>类。但是,并不是这样的!ArrayList<Cat>类和ArrayList<Animal>类没有继承关系。
打个比方吧,我们用Zoo(创建了一个动物园类)来替代ArrayList——由Cat(猫)们组成的动物园和由Animal(动物)们组成的动物园,从分类法来看,并没有上下级的关系。一个是动物组成的动物园,一个是猫构成的动物园,并没有哪个是父类,哪个是子类这一说。Zoo<Cat>和Zoo<Animal>完全是两个不同的东西,但是,它们两个,都是Zoo的子类,狗动物园也好,猫动物园也好,都是动物园。
Zoo<Cat> z1 = new Zoo<>();
z1.add(new Cat());
Zoo z = z1;
z.add(new Dog());
z.add(new Mouse());z1中的本来是只有猫的,但是,通过z的创建,调用添加内容的方法,改变了z1的内容——在其中加入了狗和老鼠,这样子,虽然编译及运行时没出错,但是,如果在后续对z1进行操作并获取其内容,就会出现错误。。。动物园在猫、狗和老鼠的折腾下,怕是要出乱子。
本文通过动物园类比,解释了泛型与继承的区别。Cat类继承Animal类,但ArrayList<Cat>并不继承ArrayList<Animal>。文章探讨了这种设计的原因,并通过实例展示了不当使用可能引发的问题。
1184

被折叠的 条评论
为什么被折叠?



