黑马程序员技术交流社区

标题: [已解决]关于迭代器的疑问!求解! [打印本页]

作者: 武鹏玉    时间: 2012-8-7 12:23
标题: [已解决]关于迭代器的疑问!求解!
本帖最后由 武鹏玉 于 2012-8-7 15:17 编辑

关于Iterator这个类,在查文档的时候  Iterator是一个接口, 接口不能new对象,方法又是抽象的,那么这里为什么能直接用呢?


Iterator iter = arrayList.iterator();
while(iter.hasNext()){
          iter.next();
}
作者: 尤洋    时间: 2012-8-7 12:28
本帖最后由 尤洋 于 2012-8-7 12:40 编辑

这里其实是  父类引用指向子类对象,是多态的表现形式之一。
实际创建的还是子类对象而不是Iterator的对象。
在基础视频中关于多态那一节就提到过 多态的前提
必须是类与类之间有关系。要么继承,要么实现。

所以这里你没有给上下文,我们仍然可以断定 必然是该子类实现了Iterator接口。
另外 这里还需要注意的是 只能使用父类的引用访问父类中的成员。也就是
Iterator iter = arrayList.iterator();中 iter 访问的只能是 接口中的方法,
而不能访问子类特有方法。
作者: 潘星    时间: 2012-8-7 14:23
应为迭代器是封装在集合容器中的一个内部工具,集合本身对外提供了可以获取该对象的方法,
Iterator iter = arrayList.iterator(); 这里Iterator并没有new对象,只是通过iterator这个方法返回了一个对象,
而这个接口的引用指向了这个对象。
作者: 张_涛    时间: 2012-8-7 19:43
查看API吧
ArrayList实现了Iterable接口,Iterable接口中有这个iterator方法。
作者: 余明辉    时间: 2012-8-7 23:41
ArrayList al = new ArrayList();
Iterator it = al.iterator();
System.out.println(it.getClass().getName());

运行结果
java.util.AbstractList$Itr

API中
类 AbstractList<E>
直接已知子类:
AbstractSequentialList, ArrayList, Vector




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