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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 武鹏玉 初级黑马   /  2012-8-7 12:23  /  1682 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 武鹏玉 于 2012-8-7 15:17 编辑

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


Iterator iter = arrayList.iterator();
while(iter.hasNext()){
          iter.next();
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 新人亮相,赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 尤洋 于 2012-8-7 12:40 编辑

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

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

运行结果
java.util.AbstractList$Itr

API中
类 AbstractList<E>
直接已知子类:
AbstractSequentialList, ArrayList, Vector
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马