黑马程序员技术交流社区
标题:
关于泛型参数传递
[打印本页]
作者:
不灬语
时间:
2016-9-6 23:33
标题:
关于泛型参数传递
比如有个方法 add( ArrayList<Person> list){ }为什么调用的时候,add(ArrayList<Student> list> 为什么不可以呢? 不算父类引用指向子类对象吗
作者:
lzxxiong
时间:
2016-9-7 00:15
在这里父类引用指向子类对象应该是这样
add( List<Person> list) 假设这是父类引用,那么子类的应该是add(ArrayList<Person> list)而不是指泛型.
是指ArrayList是List的子类.
至于你上面的为什么不行,假设如果我要创建一个泛型为Person的ArrayList对象:
ArrayList<Person> list = new ArrrayList<Person>(); 这里有个要求你记得么吗兄弟?后面的泛型类型要和前面的一致或者你可以不写.你上面的意思是这样
ArrayList<Person> list = new ArrrayList<Studnet>();
具体怎么解释我也不太懂,水平有限,但是我知道这是与泛型擦除有关的,泛型只在编译时期是有效的.实际上编译后虚拟机会将泛型擦除,底层用的全都是Object对象.
作者:
gjf821687
时间:
2016-9-7 00:36
首先,你的Student是Person的子类吗,其次,前面那个方法没有上限限定,可以改成 add(ArrayList<? extends Person>){}
作者:
MarsBong
时间:
2016-9-7 00:40
这个涉及到泛型通配符的问题
作者:
flydream
时间:
2016-9-7 00:48
这是需要用到通配符,add( ArrayLIst<? super Person> list),这样应该可以得,
作者:
Toxicant
时间:
2016-9-7 01:39
泛型的使用是不支持多态
作者:
小菜白白白
时间:
2016-9-7 08:56
应该要用<?super >
作者:
HARRY_yFd0S
时间:
2016-9-7 09:10
阔以啊。你的add的泛型里写person实际上只是一个名字而言,它可以用任何类代替
作者:
LShu
时间:
2016-9-7 10:44
这个应该是属于多态的一个好处,以父类作为形式参数传递,方法可以接收任何子类对象.但是这个前提是有继承关系的.不知客官你的Student和Person是否存在继承的关系呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2