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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

下面是我在读书的过程中遇到的一段代码:

Collection books = new HashSet();
//获取books集合对应的迭代器
Iterator it = books.iterator();

我的疑问是,创建迭代器对象为什么不需要new修饰符修饰?


7 个回复

倒序浏览
Iterator接口 没有构造函数 new了也白new 不能new
回复 使用道具 举报
Iterator接口 没有构造函数 new了也白new 不能new, 在集合中都提供了一个iterator()方法,调用之后会返回Iterator型对象。也就是说Iterator型对象一般都是用集合调方法得到的。不能直接new得到。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Iterator接口 没有构造函数 new了也白new 不能new, 在集合中都提供了一个iterator()方法,调用之后会返回Iterator型对象。也就是说Iterator型对象一般都是用集合调方法得到的。不能直接new得到。
回复 使用道具 举报
因为Interator接口没有构造函数,所以不能被实例化
回复 使用道具 举报
Interator接口本身没有构造函数,而通过new出来的对象都是要先进行初始化的,没有构造函数就不能初始化。要获得Interator对象,必须通过创建一个实现了Interable接口的类的对象,然后用该对象调用Interator()方法,才能返回Interator对象。

要获得对象,有两个方法,1、自己用new关键字创建,前提是该对象的类要有能访问的构造函数;2、通过调用返回该类的方法获得。
回复 使用道具 举报
       Connection是一个接口,他不能被实例化,所以必须让子类帮他实例化,所以就创建了能够实例化的对象
而且Connection接口中有迭代器Iterator的抽象方法,由于是被子类给复写了,所以只要new一个子类对象,能够
对接口Connection进行实现就可以用这个方法了,用父类对象调用Iterator()方法而运行的时候就运行了子类复写的
方法,所以不用new了
回复 使用道具 举报
实际Iterator是通过在其构造函数中实例一个内部类来进行实例化的,下面是源码:
public Iterator<E> Iterator()
{
        return new Itr();
}
Itr类是一个私有内部类,它实现了Iterator接口。因为集合种类众多,对其中元素的提取会因为集合结构的不同,实现方法也会不同,java中将其封装成一个类,这样简化了操作。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马