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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘源 于 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()方法吗,但后面我给加上了。系统还是没有找到啊。那为什么我改完了之后,系统还是找不到呢。希望思路好的解答下。谢谢。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

3 个回复

倒序浏览
Student的父类不仅仅是Person,还有Person的父类Object,而Object显然没有getName;
而Person的子类无论是谁都可以获得Person的getName,所以没问题
回复 使用道具 举报
Object类是所有类的父类,所以Student类和Person自然是Object的子类,而Student又是Person的子类,Object类是没有getName()方法的,
Student 类因为是Person的子类,它有getName()方法。
回复 使用道具 举报
哈哈,看明白了。谢谢各位了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马