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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一、源代码:
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

2 个回复

正序浏览
jiangwenjun 发表于 2015-4-25 20:04
第一处是因为迭代器的next方法返回值类型是Object,所以要记得类型转换。
第三处是输出 字节码类名 ...

谢谢,这样就讲得通了。:)
回复 使用道具 举报
第一处是因为迭代器的next方法返回值类型是Object,所以要记得类型转换。
第三处是输出 字节码类名
回复 使用道具 举报 2 0
您需要登录后才可以回帖 登录 | 加入黑马