黑马程序员技术交流社区

标题: 碰到个问题,不知道自己理解的对不对,吧友们帮帮忙 [打印本页]

作者: Foundmoon    时间: 2015-6-16 02:12
标题: 碰到个问题,不知道自己理解的对不对,吧友们帮帮忙
今天在吧里看帖子,看到下面的问题:
关于泛型,这个为什么错误
http://bbs.itheima.com/thread-204300-1-1.html
(出处: 黑马程序员IT技术论坛)

ArrayList<Person> al = new ArrayList<Student>( );
父类引用可以指向子类对象,但这句错在哪里了,希望高手详解


乍一看,我也蒙圈了,我觉得提问者问的对啊,我也学过泛型限定,不是允许 ?extends Person吗,Student是子类,应该可以啊
看了下笔记,有一条:在new集合时,集合的泛型必须一样。
老毕视频是说为了安全,假设允许子类的话,那么Person的其他子类如worker也可以。举得例子没听明白,有明白的希望讲一下

但是子父类的泛型限定在方法参数上是有应用的,我觉得是不是提问者把二者混淆了
在方法上如
void show(ArrayList<?extends Person>){}是可用的,假如有如下两个ArrayList集合
ArrayList<Person> al1 = new ArrayList<Person>( );
ArrayList<Student> al2 = new ArrayList<Student>( );

那么在show的参数里传入 al1和al2都是可以的。
作者: micro_hx    时间: 2015-6-16 09:42
这么说吧,你记住就行,就是list的前后所包括的泛型应该是一致的,这里是因为泛型的擦除问题所引起的,也有一部分是因为安全问题。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2