黑马程序员技术交流社区
标题:
关于泛型限定的高级应用的问题,现在思路混乱了。
[打印本页]
作者:
刘源
时间:
2012-7-13 17:41
标题:
关于泛型限定的高级应用的问题,现在思路混乱了。
本帖最后由 刘源 于 2012-7-14 10:24 编辑
这个是毕老师的泛型限定高级应用的视频,看到泛型限定,很吃力了,思路混乱中,希望高手解答下。
class Person
{
public
String name;
Person(String name)
{
this.name = name;
}
String getName()
{
return name;
}
}
class Student extends Person
{
Student(String name)
{
super(name);
}
public String getName()
{
return name;
}
}
class GenericDemo7
{
public static void main(String[] args)
{
ArrayList<;Person> a1 = new ArrayList<;Person>();
a1.add(new Person("liu"));
a1.add(new Person("wang"));
a1.add(new Person("zhang"));
//printColl(a1);
ArrayList<Student> a2 = new ArrayList<Student>();
a2.add(new Student("xiao"));
a2.add(new Student("hong"));
a2.add(new Student("wei"));
printColl(a2);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void printColl(ArrayList<? extends Person> t)
//? super Student
{
for(Iterator<? extends Person>it =t.iterator();it.hasNext();)
{
sop(it.next().getName());
}
}
}
代码中<? extends Person>,本人已经理解了。那为什么学生继承了父亲,而且学生也没有什么特有的方法,那为什么把<? extends Person>改成了<? super Student>,系统就给我报错呢。
系统错误为:
GenericDemo7.java:27: 找不到符号
符号: 方法 getName()
位置: 类 java.lang.Object
sop(it.next().getName());
难到是因为student没有getName()方法吗,但后面我给加上了。系统还是没有找到啊。那为什么我改完了之后,系统还是找不到呢。希望思路好的解答下。谢谢。
作者:
陆强强
时间:
2012-7-13 18:00
Student的父类不仅仅是Person,还有Person的父类Object,而Object显然没有getName;
而Person的子类无论是谁都可以获得Person的getName,所以没问题
作者:
刘俊佳
时间:
2012-7-13 18:21
Object类是所有类的父类,所以Student类和Person自然是Object的子类,而Student又是Person的子类,Object类是没有getName()方法的,
Student 类因为是Person的子类,它有getName()方法。
作者:
刘源
时间:
2012-7-14 10:23
哈哈,看明白了。谢谢各位了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2