A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天在吧里看帖子,看到下面的问题:
关于泛型,这个为什么错误
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都是可以的。

1 个回复

倒序浏览
这么说吧,你记住就行,就是list的前后所包括的泛型应该是一致的,这里是因为泛型的擦除问题所引起的,也有一部分是因为安全问题。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马