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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-3-8 11:46  /  946 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

提示找不到getName()
import java.util.*;
class  fanxing
{
        public static void main(String[] args)
        {
                //ArrayList<Person> a = new ArrayList<Person>();                 
                //a.add(new Person("lixi3"));
                //print(a);
                ArrayList<Student> a1 = new ArrayList<Student>();
                a1.add(new Student("abc1"));
                a1.add(new Student("abc2"));
                print(a1);                 
        }
        public static void print(ArrayList<? super Student>  a )
        {
                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
{          
        Student(String name)
        {
                super(name);
        }         
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

5 个回复

倒序浏览
修改方式如下:
<? super Student>改为<? extends Person>

  1. import java.util.*;
  2. public class Test1
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //ArrayList<Person> a = new ArrayList<Person>();                 
  7.                 //a.add(new Person("lixi3"));
  8.                 //print(a);
  9.                 ArrayList<Student> a1 = new ArrayList<Student>();
  10.                 a1.add(new Student("abc1"));
  11.                 a1.add(new Student("abc2"));
  12.                 print(a1);                 
  13.         }
  14.         public static void print(ArrayList<? extends Person>  a )
  15.         {
  16.                 Iterator<? extends Person> it = a.iterator();
  17.                 while (it.hasNext())
  18.                 {        
  19.                         System.out.println(it.next().getName());
  20.                 }
  21.         }
  22. }
  23. class Person
  24. {
  25.         private String name;
  26.         Person(String name)
  27.         {
  28.                 this.name=name;
  29.         }
  30.         public String getName()
  31.         {
  32.                 return name;
  33.         }
  34. }
  35. class Student extends Person
  36. {         
  37.         Student(String name)
  38.         {
  39.                 super(name);
  40.         }         
  41. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
把print函数中的super改换成extends就ok了;你的源代码已修改:
  1. class  fanxing
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //ArrayList<Person> a = new ArrayList<Person>();                 
  6.                 //a.add(new Person("lixi3"));
  7.                 //print(a);
  8.                 ArrayList<Student> a1 = new ArrayList<Student>();
  9.                 a1.add(new Student("abc1"));
  10.                 a1.add(new Student("abc2"));
  11.                 print(a1);                 
  12.         }
  13.         public static void print(ArrayList<? extends Student>  a )
  14.         {
  15.                 Iterator<? extends Student> it = a.iterator();
  16.                 while (it.hasNext())
  17.                 {
  18.                         System.out.println(it.next().getName());
  19.                 }
  20.         }
  21. }
  22. class Person
  23. {
  24.         private String name;
  25.         Person(String name)
  26.         {
  27.                 this.name=name;
  28.         }
  29.         public String getName()
  30.         {
  31.                 return name;
  32.         }
  33. }
  34. class Student extends Person
  35. {         
  36.         Student(String name)
  37.         {
  38.                 super(name);
  39.         }         
  40. }
复制代码



回复 使用道具 举报
把你的注释去掉后就运行这个(print可以打印Person和Student的对象):
  1. class  fanxing
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 ArrayList<Person> a = new ArrayList<Person>();                 
  6.                a.add(new Person("lixi3"));
  7.                print(a);
  8.                 ArrayList<Student> a1 = new ArrayList<Student>();
  9.                 a1.add(new Student("abc1"));
  10.                 a1.add(new Student("abc2"));
  11.                 print(a1);                 
  12.         }
  13.         public static void print(ArrayList<? extends Person>  a )
  14.         {
  15.                 Iterator<? extends Person> it = a.iterator();
  16.                 while (it.hasNext())
  17.                 {
  18.                         System.out.println(it.next().getName());
  19.                 }
  20.         }
  21. }
  22. class Person
  23. {
  24.         private String name;
  25.         Person(String name)
  26.         {
  27.                 this.name=name;
  28.         }
  29.         public String getName()
  30.         {
  31.                 return name;
  32.         }
  33. }
  34. class Student extends Person
  35. {         
  36.         Student(String name)
  37.         {
  38.                 super(name);
  39.         }         
  40. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王松松 于 2014-3-8 13:24 编辑

额....没注意看你加了泛型,那就不需要强转了Iterator<E>,好像没有泛型上下限,你换成Iterator<Student>看看
回复 使用道具 举报
明白了   thanks
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马