黑马程序员技术交流社区

标题: 迭代器ListIretator问题求解 [打印本页]

作者: 。。。。。。。    时间: 2013-11-11 18:14
标题: 迭代器ListIretator问题求解
ArrayList  al = new ArayList();
ListIretator li = al.listiretator();
li.remove();

我的问题是:ListIratetor是一个接口,li是一个引用,怎么引用还能够调用自己接口中的方法呢?接口中的方法不全都是抽象的吗?不是只能被复写才能够被调用的吗?

作者: ysunday    时间: 2013-11-11 20:40
我觉得是List的子类,比如ArrayList实现了ListIterator接口,然后是ArrayList的对象调用的这个方法,然后调用listIterator()这个方法,返回一个ArrayList中的ListIterator的东西,这个东西只负责遍历集合。我也不是特别清楚,建议你看下毕向东老师的视频,集合那几集,里边有讲到底这个Iterator到底怎么回事。
作者: 赵晓海    时间: 2013-11-11 20:47
我是这么理解的,ArrayList  al = new ArayList();其方法表面是接口的 其实还是调用实现类的方法
作者: 赵晓海    时间: 2013-11-11 20:51
发现一个小问题,iterator你拼错了,三个都拼成了iretator
作者: 小痞痞    时间: 2013-11-11 22:45
本帖最后由 小痞痞 于 2013-11-11 22:51 编辑
  1. 1、public class ArrayList<E> extends AbstractList<E>
  2.         implements List<E>, RandomAccess, Cloneable, java.io.Serializable

  3. 2、public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>

  4. 3、public abstract class AbstractCollection<E> implements Collection<E>

  5. 4、public interface Collection<E> extends Iterable<E>
复制代码
从上边的源码中可以看出Iterable和ArrayList属于多层继承
  1. 1、public ListIterator<E> listIterator(int index) {
  2.         if (index < 0 || index > size)
  3.             throw new IndexOutOfBoundsException("Index: "+index);
  4.         return new ListItr(index);
  5.     }

  6. public ListIterator<E> listIterator() {
  7.         return new ListItr(0);
  8.     }

  9. 2、private class ListItr extends Itr implements ListIterator<E>

  10. private class Itr implements Iterator<E>


  11. public interface ListIterator<E> extends Iterator<E>
复制代码
在AarrayList中有一方法listIterator()而根据方法可以看出最后实现了Iterator接口
listIterator()最后返回的是ListIterator()
ArrayList list = new   ArrayList();
ListIterator li = list.listIterator();           //其实这一步是调用的ArrayList中的listIterator方法
所以最后才可以直接调用li.remove();





作者: 简★零度    时间: 2013-11-11 22:46
这个需要你查API,上面会详细说明的!
作者: Lucking    时间: 2013-11-12 02:09
LZ请好好理解java的多态性,理解了多态,你的问题就迎刃而解了,不理解多态估计到后面问题会越来越多的,java在调用方法时是动态绑定的,父类的引用可以指向子类的对象,同理,接口的引用可以指向实现类的对象,调用的具体方法不是看引用的类型,而是看对象的类型哦,具体调用的方法是动态绑定到new出来的对象上的哦,这个很重要哦~~
作者: 秦大忠    时间: 2013-11-13 10:34
简★零度 发表于 2013-11-11 22:46
这个需要你查API,上面会详细说明的!

羡慕死你了




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