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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 。。。。。。。 中级黑马   /  2013-11-11 18:14  /  1765 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ArrayList  al = new ArayList();
ListIretator li = al.listiretator();
li.remove();

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

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
我觉得是List的子类,比如ArrayList实现了ListIterator接口,然后是ArrayList的对象调用的这个方法,然后调用listIterator()这个方法,返回一个ArrayList中的ListIterator的东西,这个东西只负责遍历集合。我也不是特别清楚,建议你看下毕向东老师的视频,集合那几集,里边有讲到底这个Iterator到底怎么回事。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

回复 使用道具 举报
我是这么理解的,ArrayList  al = new ArayList();其方法表面是接口的 其实还是调用实现类的方法
回复 使用道具 举报
发现一个小问题,iterator你拼错了,三个都拼成了iretator

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 小痞痞 于 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();




评分

参与人数 1技术分 +2 收起 理由
狼王 + 2

查看全部评分

回复 使用道具 举报
这个需要你查API,上面会详细说明的!

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

回复 使用道具 举报
Lucking 中级黑马 2013-11-12 02:09:20
7#
LZ请好好理解java的多态性,理解了多态,你的问题就迎刃而解了,不理解多态估计到后面问题会越来越多的,java在调用方法时是动态绑定的,父类的引用可以指向子类的对象,同理,接口的引用可以指向实现类的对象,调用的具体方法不是看引用的类型,而是看对象的类型哦,具体调用的方法是动态绑定到new出来的对象上的哦,这个很重要哦~~

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

回复 使用道具 举报
简★零度 发表于 2013-11-11 22:46
这个需要你查API,上面会详细说明的!

羡慕死你了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马