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