黑马程序员技术交流社区

标题: 帮忙看看这个代码怎么编译不通过 [打印本页]

作者: 谭荣强    时间: 2014-3-8 11:46
标题: 帮忙看看这个代码怎么编译不通过
提示找不到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);
        }         
}
作者: osully    时间: 2014-3-8 11:55
修改方式如下:
<? 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. }
复制代码


作者: syw02014    时间: 2014-3-8 12:00
把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. }
复制代码




作者: syw02014    时间: 2014-3-8 12:06
把你的注释去掉后就运行这个(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. }
复制代码


作者: 王松松    时间: 2014-3-8 13:15
本帖最后由 王松松 于 2014-3-8 13:24 编辑

额....没注意看你加了泛型,那就不需要强转了Iterator<E>,好像没有泛型上下限,你换成Iterator<Student>看看

作者: 谭荣强    时间: 2014-3-8 16:17
明白了   thanks




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2