黑马程序员技术交流社区

标题: IterIter返回的是接口,怎么可以调用hasNext()方法? [打印本页]

作者: welfsen    时间: 2015-3-20 13:07
标题: IterIter返回的是接口,怎么可以调用hasNext()方法?
  Iterator it = a.iterator( );
既然返回一个借口,借口怎么会有hasNext()方法。借口不是只有抽象方法吗?
怎么能够调用hasNext()方法呢?


作者: fantacyleo    时间: 2015-3-20 13:10
想想接口实现和多态的概念
作者: hamesksk    时间: 2015-3-20 13:38
Iterator it = a.iterator( );
左边是接口,但右边是接口的实现对象。
比如:List list = new ArrayList();
List也是接口
作者: welfsen    时间: 2015-3-20 15:13
fantacyleo 发表于 2015-3-20 13:10
想想接口实现和多态的概念

嗯!回头看看视频,理解更深刻了些!
作者: welfsen    时间: 2015-3-20 15:15
hamesksk 发表于 2015-3-20 13:38
Iterator it = a.iterator( );
左边是接口,但右边是接口的实现对象。
比如:List list = new ArrayList(); ...

嗯!谢谢!回头看了看视频,理解更家深刻些了!
作者: Etby    时间: 2015-3-20 15:41
是可以引用<接口>的引用使用多态承载返回的迭代器对象(内部)
作者: 女神从来不加班    时间: 2015-3-20 16:04
楼主好好复习一下多态那里吧 :lol
作者: welfsen    时间: 2015-3-21 12:53
女神从来不加班 发表于 2015-3-20 16:04
楼主好好复习一下多态那里吧

嗯!又回头看了看视频,理解了!
作者: 突然世界晴    时间: 2015-3-21 18:05
这个就是父接口引用子类对象啊
作者: 夜班心桥    时间: 2015-3-21 23:18
iterator的源码:
public Iterator<E> iterator() {
        return new Itr();
    }
这里Itr为Iterator的一个内部类, Itr implements Iterator。
Iterator it = a.iterator(); 这里其实是,体现了多态特性。希望能帮助到您。
作者: 卢乾荣    时间: 2015-3-21 23:27
父类引用指向子类对象,编译看左边,运行看右边,多态的特征
作者: wkz_crystal    时间: 2015-3-22 02:27
a.iterator其实就是其Iterator具体的实现类了,用该类调用其自身的方法,是完全正确的,我之前也有你这样的疑惑,后来看了API才明白的!
作者: welfsen    时间: 2015-3-25 11:22
wkz_crystal 发表于 2015-3-22 02:27
a.iterator其实就是其Iterator具体的实现类了,用该类调用其自身的方法,是完全正确的,我之前也有你这样的 ...

嗯~重点在于理解吧!
作者: ruchsky    时间: 2015-3-25 14:32
它利用了多态,Iterator本身是一个接口,但是它指向了一个实现它的实例
作者: android-liu    时间: 2015-3-25 14:44
是多态,接口引用指向子类对象
作者: welfsen    时间: 2015-3-25 20:52
android-liu 发表于 2015-3-25 14:44
是多态,接口引用指向子类对象

嗯!谢谢!我已经搞明白了!
作者: 法国外籍军团    时间: 2015-3-25 22:04
这就是一个多态的概念   返回的是一个具体的实现,
作者: welfsen    时间: 2015-3-26 10:50
:)嗯!谢谢!!
作者: 山里孩子    时间: 2015-3-26 22:41
多态呗.也才看到,晕糊了半天才搞明白
还有  就是  Iterator   和  ListIterator  这两个接口的区别:
一个父类  方法只有3 个  next()  hasNext()  remove()
一个子类  方法多些.可以添加,删除   
作者: welfsen    时间: 2015-3-26 22:43
山里孩子 发表于 2015-3-26 22:41
多态呗.也才看到,晕糊了半天才搞明白
还有  就是  Iterator   和  ListIterator  这两个接口的区别:
一个父 ...

嗯!!重要的是一种面向对象的思想!
作者: 独孤忆    时间: 2015-3-28 21:39
本帖最后由 独孤忆 于 2015-3-28 21:40 编辑

首先,这是返回的一个迭代器对象,不是接口。这里利用了多态,接口类型的引用指向自己的实现类对象,实现类对象(迭代器)调hasNext()方法进行判断。
作者: 爱做梦的年纪    时间: 2015-4-1 17:58
这是一个多态的概念的理解了。iter.iterator()   返回的类型就是接口的具体子类对象。就是返回按适当顺序在列表的元素上进行迭代的迭代器。
作者: welfsen    时间: 2015-4-1 23:11
独孤忆 发表于 2015-3-28 21:39
首先,这是返回的一个迭代器对象,不是接口。这里利用了多态,接口类型的引用指向自己的实现类对象,实现类 ...

嗯!谢谢!
作者: 悟败者    时间: 2015-4-9 08:00
多态的知识啦  父类引用指向子类对象
作者: 叶松ye    时间: 2015-4-9 19:41
没学到还




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