我这样写的
输出:
Student@35ce36
Student@757aef
Student@d9f9c3
Student@9cab16
Student@1a46e30
Student@3e25a5我想要输出学生姓名如何实现???import java.util.*;
public class Student {
String name;
Student(String setName){
name = setName;
}


public static void main(String []args){
Student Student1 = new Student("a");
Student Student2 = new Student("b");
Student Student3 = new Student("c");
Student Student4 = new Student("d");
Student Student5 = new Student("e");
Student Student6 = new Student("f");


List<Student> list = new ArrayList<Student>();
Set<Student> set = new HashSet<Student>(); list.add(Student1); 
list.add(Student2); 
list.add(Student3); 
list.add(Student4);
list.add(Student5);
list.add(Student6);

set.add(Student1); 
set.add(Student2); 
set.add(Student3); 
set.add(Student4);
set.add(Student5);
set.add(Student6);


for (int i = 0; i < list.size(); i++) {
Object m = (Student)list.get(i);
System.out.println(m);
}

}

}

解决方案 »

  1.   

    如果写成for (int i = 0; i < list.size(); i++) {
                Object m = (Student)list.get(i);
                System.out.println(m.name);
                }它会报错说m.name不是字段。。
      

  2.   

    for (int i = 0; i < list.size(); i++) { 
                Student m = (Student)list.get(i); 
                System.out.println(m.name); 
                } 
      

  3.   

    呵呵,那当然不能写成 m.name 了,因为 Object 并没有这个 name 字段啊由于采用了向上转型,转型后的对象只能看到 Object 的东西。因为你这个已经采用了泛型参数,也就是 List 后面加上了 <Student>,这样的话 list.get(i) 取出来的对象直接就是 Student 的,
    并不需要再进行强制转换,这就是使用泛型参数带来的好处。这样改一下就可以了:for (int i = 0; i < list.size(); i++) {
        Student m = list.get(i);
        System.out.println(m.name);
    }如果没采用泛型参数,也就是不在 List 后面加 <Student> 的话,list.get(i) 取出来是个 Object 的对象,需要强制转换一下:for (int i = 0; i < list.size(); i++) {
        Student m = (Student)list.get(i);
        System.out.println(m.name);
    }另外说一下,Student 类中的 name 建议设置成 private 的,并且提供 set/get 方法,养成好的习惯,以更好地进行封装。