黑马程序员技术交流社区

标题: 创建迭代器对象为什么不需要new修饰符修饰? [打印本页]

作者: 黑马王冬冬    时间: 2012-7-25 14:11
标题: 创建迭代器对象为什么不需要new修饰符修饰?
下面是我在读书的过程中遇到的一段代码:

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

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



作者: 冯心程    时间: 2012-7-25 14:20
Iterator接口 没有构造函数 new了也白new 不能new
作者: 罗宵    时间: 2012-7-25 21:34
Iterator接口 没有构造函数 new了也白new 不能new, 在集合中都提供了一个iterator()方法,调用之后会返回Iterator型对象。也就是说Iterator型对象一般都是用集合调方法得到的。不能直接new得到。
作者: 罗宵    时间: 2012-7-25 21:34
Iterator接口 没有构造函数 new了也白new 不能new, 在集合中都提供了一个iterator()方法,调用之后会返回Iterator型对象。也就是说Iterator型对象一般都是用集合调方法得到的。不能直接new得到。
作者: 李菁    时间: 2012-7-25 22:01
因为Interator接口没有构造函数,所以不能被实例化
作者: 梁志仲    时间: 2012-7-25 23:30
Interator接口本身没有构造函数,而通过new出来的对象都是要先进行初始化的,没有构造函数就不能初始化。要获得Interator对象,必须通过创建一个实现了Interable接口的类的对象,然后用该对象调用Interator()方法,才能返回Interator对象。

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




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