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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zippo 中级黑马   /  2014-7-30 16:12  /  1658 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zippo 于 2014-8-2 22:44 编辑

ArrayList al = new ArrayList();
Iterator it = al.iterator();
第二行的代码:Iterator是一个接口,为什么可以创建一个对象呢?

15 个回复

倒序浏览
Iterator iterator() 是 Collection中的方法,返回一个迭代器接口的实现类对象     Iterator it = iterator()接口指向自己的实现类对象
回复 使用道具 举报
其实接口是一种特殊的类,所以接口属于类,类的范围更大一点
类描述了一个实体,包括实体的状态,也包括实体可能发出的动作。
接口定义了一个实体可能发出的动作。但是只是定义了这些动作的原型,没有实现,也没有任何状态信息。

类可以继承,但是接口没有可以实现,
类可以有自己的属性,接口没有。
回复 使用道具 举报
我怎么没看出来Iterator有创建对象。创建对象的关键字new都没出现。。接口是特殊的抽象类,定义的方法都是必须是抽象方法,,是位于继承树顶端的类,只能被其他类所实现。接口是一种规范,按一本书的话说,接口是“总纲”,抽象类则是“模板”。
回复 使用道具 举报
rolling-stone 发表于 2014-7-30 17:33
其实接口是一种特殊的类,所以接口属于类,类的范围更大一点
类描述了一个实体,包括实体的状态,也包括实 ...

说了这么多都没说重点。
回复 使用道具 举报
LFW 发表于 2014-7-30 19:21
我怎么没看出来Iterator有创建对象。创建对象的关键字new都没出现。。接口是特殊的抽象类,定义的方法都是 ...

右边的不就是创建了一个左边的对象吗?不然左边的it怎么来的?
回复 使用道具 举报
zippo 发表于 2014-7-30 22:19
说了这么多都没说重点。

重点就是第一句话,接口也可以算一种类,所以可以创建对象。
回复 使用道具 举报
LFW 中级黑马 2014-7-31 15:55:58
8#
rolling-stone 发表于 2014-7-30 22:31
重点就是第一句话,接口也可以算一种类,所以可以创建对象。

接口是特殊的抽象类,接口不能实例化。接口只能通过其实现类来创建对象。接口不能创建对象。
回复 使用道具 举报
iterator()是一个函数,这个函数返回一个对象并向上转型赋值给it。iterator()函数是在接口Iterable中定义的,各个容器都实现了这个接口。
回复 使用道具 举报
LFW 发表于 2014-7-31 15:55
接口是特殊的抽象类,接口不能实例化。接口只能通过其实现类来创建对象。接口不能创建对象。 ...

通过现类来创建对象难道就不叫创建对象吗?
回复 使用道具 举报
这不是直接创建对象,而是用ArrayList里的一个iterator的方法返回一个Iterator的子类对象。这个子类是在ArrayList里的一个内部类。他实现了Iterator这个接口,那么返回来的对象当然可以用父类(接口或是类)来接收。
回复 使用道具 举报
假设A 是个接口。实例化指的是A a = new A(); 对于接口来说这是不允许的。
假设B 类实现了A的接口   则这个实例化指的是B的实例化   A a = new B();  
总结来说。接口可以声明一个引用。但这个引用指向的是它的实现类的实例。
区别开实例化(new一个对象)和声明引用的区别
回复 使用道具 举报
LFW 中级黑马 2014-7-31 18:47:22
13#
GoodBoy123 发表于 2014-7-31 18:31
这不是直接创建对象,而是用ArrayList里的一个iterator的方法返回一个Iterator的子类对象。这个子类是在Arr ...

我也是这么觉得,有些人就是说它创建了对象。。。。无语
回复 使用道具 举报
LFW 中级黑马 2014-7-31 18:48:26
14#
rolling-stone 发表于 2014-7-31 17:47
通过现类来创建对象难道就不叫创建对象吗?

那你可以去问问,接口可不可以实例化。我的观点:接口的实现类可以实例化,可以创建对象;接口不能实例化,不可以创建对象、
回复 使用道具 举报
al.iterator()返回的是一个Iterator类型的对象,语句2并不是表示你直接使用Iterator接口产生一个对象,而是将一个Iterator实现类的对象的引用赋给了it。
回复 使用道具 举报
zippo 中级黑马 2014-7-31 20:38:19
16#
GoodBoy123 发表于 2014-7-31 18:31
这不是直接创建对象,而是用ArrayList里的一个iterator的方法返回一个Iterator的子类对象。这个子类是在Arr ...

去查了一下源代码,确实如兄台所说,谢谢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马