输出:
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);
}
}
}
6 个解决方案
#1
如果写成
for (int i = 0; i < list.size(); i++) {
Object m = (Student)list.get(i);
System.out.println(m.name);
}
它会报错说m.name不是字段。。
for (int i = 0; i < list.size(); i++) {
Object m = (Student)list.get(i);
System.out.println(m.name);
}
它会报错说m.name不是字段。。
#2
怎么没人来帮我啊。。新人啊,急需帮助。。 - -
#3
for (int i = 0; i < list.size(); i++) {
Student m = (Student)list.get(i);
System.out.println(m.name);
}
#4
呵呵,那当然不能写成 m.name 了,因为 Object 并没有这个 name 字段啊
由于采用了向上转型,转型后的对象只能看到 Object 的东西。
因为你这个已经采用了泛型参数,也就是 List 后面加上了 <Student>,这样的话 list.get(i) 取出来的对象直接就是 Student 的,
并不需要再进行强制转换,这就是使用泛型参数带来的好处。
这样改一下就可以了:
如果没采用泛型参数,也就是不在 List 后面加 <Student> 的话,list.get(i) 取出来是个 Object 的对象,需要强制转换一下:
另外说一下,Student 类中的 name 建议设置成 private 的,并且提供 set/get 方法,养成好的习惯,以更好地进行封装。
由于采用了向上转型,转型后的对象只能看到 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 方法,养成好的习惯,以更好地进行封装。
#5
又见果子大哥~
----专业跟帖人员~
----专业跟帖人员~
#6
问题解决了。。楼上的也做了解释,谢谢两位!
#1
如果写成
for (int i = 0; i < list.size(); i++) {
Object m = (Student)list.get(i);
System.out.println(m.name);
}
它会报错说m.name不是字段。。
for (int i = 0; i < list.size(); i++) {
Object m = (Student)list.get(i);
System.out.println(m.name);
}
它会报错说m.name不是字段。。
#2
怎么没人来帮我啊。。新人啊,急需帮助。。 - -
#3
for (int i = 0; i < list.size(); i++) {
Student m = (Student)list.get(i);
System.out.println(m.name);
}
#4
呵呵,那当然不能写成 m.name 了,因为 Object 并没有这个 name 字段啊
由于采用了向上转型,转型后的对象只能看到 Object 的东西。
因为你这个已经采用了泛型参数,也就是 List 后面加上了 <Student>,这样的话 list.get(i) 取出来的对象直接就是 Student 的,
并不需要再进行强制转换,这就是使用泛型参数带来的好处。
这样改一下就可以了:
如果没采用泛型参数,也就是不在 List 后面加 <Student> 的话,list.get(i) 取出来是个 Object 的对象,需要强制转换一下:
另外说一下,Student 类中的 name 建议设置成 private 的,并且提供 set/get 方法,养成好的习惯,以更好地进行封装。
由于采用了向上转型,转型后的对象只能看到 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 方法,养成好的习惯,以更好地进行封装。
#5
又见果子大哥~
----专业跟帖人员~
----专业跟帖人员~
#6
问题解决了。。楼上的也做了解释,谢谢两位!