黑马程序员技术交流社区
标题:
<? super Student>泛型限定的问题……
[打印本页]
作者:
杨华威
时间:
2012-4-1 18:21
标题:
<? super Student>泛型限定的问题……
import java.util.*;
class GenericDemo6
{
public static void main(String[] args)
{
ArrayList<Person> al = new ArrayList<Person>();
al.add(new Person("abc2"));
al.add(new Person("abc3"));
al.add(new Person("abc4"));
al.add(new Person("abc5"));
ArrayList<Student> all = new ArrayList<Student>();
all.add(new Student("abc--2"));
all.add(new Student("abc--3"));
all.add(new Student("abc--4"));
all.add(new Student("abc--5"));
//print(al);
print(all);
}
public static void print(ArrayList<? super Student> a) //<? super E> :可以接收E类型或者E的父类类型。
{
Iterator<? super Student> it = a.iterator();
while (it.hasNext())
{
System.out.println(it.next().getName()); //问题在这
}
}
}
class Person
{
private String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
private String name;
Student (String name)
{
super(name);
}
}
System.out.println(it.next().getName());
在这为什么提示找不到getName()方法呢?
作者:
孙利川
时间:
2012-4-1 18:59
<? super Student>这个意思是说可以接收Student类型的所有父类型,那么Object也是他的父类了,他自然就没有getName方法了,所以编译会出错,可以改成<? extends Person>,Person类中有getName方法,自然他的子类也都有getName方法了,编译就不会出错了。
作者:
杨华威
时间:
2012-4-1 19:06
孙利川 发表于 2012-4-1 18:59
I see,Object是所有类的父类,那么以后写下限的泛型时,都得考虑Object,这样的话,下限泛型的应用性就很有限了!
明白相对上限来说他为什么不常用了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2