黑马程序员技术交流社区

标题: ArrayList开发时,遇到的问题 [打印本页]

作者: 我不信命ZW    时间: 2015-4-25 17:48
标题: ArrayList开发时,遇到的问题
一、源代码:
package p4.bean;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListTest {
public static void main(String[] args) {
  ArrayList a1 = new ArrayList();
  a1.add(new Person("张三1",21));            //第一处
  a1.add(new Person("张三2",22));
  a1.add(new Person("张三3",23));
  a1.add(new Person("张三4",24));
  Iterator it = a1.iterator();
  System.out.println(it.next().getClass());
  while(it.hasNext()){
   Person p = (Person)it.next();            //第二处
   System.out.println(p.getName()+"--"+p.getAge());
  }
}
}
二、输出结果:
class p4.bean.Person            //第三处
张三2--22
张三3--23
张三4--24
三、问题?
    问题一:第一处是不是涉及多态中的向上转型过程,由Person类转为Object类吗?
    问题二:看了毕向东的基础视频时发现,既然说第二处代码涉及向下转型,为什么第三处输出的结果却是Person类。也就是说集合当中存储的是Person对象?那么第二处Person p = (Person)it.next();只能解释为已经为将Person类型对象强制转换成Person类型对象,否则该怎么解释?
    好困惑啊?那位大神能帮帮我吗?:dizzy::D


作者: jiangwenjun    时间: 2015-4-25 20:04
第一处是因为迭代器的next方法返回值类型是Object,所以要记得类型转换。
第三处是输出 字节码类名
作者: 我不信命ZW    时间: 2015-4-25 20:42
jiangwenjun 发表于 2015-4-25 20:04
第一处是因为迭代器的next方法返回值类型是Object,所以要记得类型转换。
第三处是输出 字节码类名 ...

谢谢,这样就讲得通了。:)




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