java Iterator<E>的问题

接口是不能被实例化的,接口中的方法都是没有方法体的抽象方法。那么请问:Listlist=newArraylist();list.add("aaa");list.add("... 接口是不能被实例化的,接口中的方法都是没有方法体的抽象方法。
那么请问:
List list=new Arraylist();
list.add( "aaa ");
list.add( "bbb ");
Iterator it=list.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
Iterator是一个接口,为什么它可以被实例化?就是Iterator it=list.iterator();这句,list.iterator()方法返回了一个Iterator的对象。接口中的方法都是没有方法体的抽象方法。为什么可以直接用it.hasNext(),it.next()),这些没有方法体的方法。没有方法体的方法应该什么都没实现啊?
展开
 我来答
百度网友4d2210204
推荐于2016-10-22 · TA获得超过238个赞
知道答主
回答量:103
采纳率:0%
帮助的人:127万
展开全部
java.util包里关于List有很多的对应的实现,Iterator是为了满足遍历的需求写的一个接口。因为相关的内容很多,而且大体都是一个模式,所以我举例说明。

在你这里采用了ArrayList来实例化一个List,所以对应的Iterator接口是在ArrayList里实现的。
我们可以找一下jdk源代码:
public class ArrayList<E> extends AbstractList<E>
AbstractList<E> extends AbstractCollection<E>
AbstractCollection<E> implements Collection<E>
Collection<E> extends Iterable<E>

终于找到了这个,我们确定了,ArrayList对于Iterable的实现是在AbstractCollection这一层实现了Iterable接口。而这个接口的内容是:public interface Iterable<T> {

/**
* Returns an iterator over a set of elements of type T.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}
具体的实现在ArrayList这个类里,
private class Itr implements Iterator<E>
你可以找源代码看一下,这个内部类实现了Iterator的所有内容。

到这里,你肯定已经明白了,实际上并不是没有实现,只是实现的过程比较曲折了一些。

这里,JDK在实现上采用了Iterator模式,这个模式的大体意义是让被遍历体与遍历的具体实现分离,只要实现Iterable接口即可通过得到一个Iterator来完成遍历。具体的内容你可以上网再搜搜看。
jessiejacky
2009-08-18 · TA获得超过227个赞
知道答主
回答量:107
采纳率:0%
帮助的人:0
展开全部
那是因为ArrayList类重写了iterator()方法,他都重写过这些方法了,iterator方法虽然对外返回的是类口,内部返回的是
实现Iterator接口的类哦,这是多态的应用技巧,对了,你去看ArrayList的抽象父类AbstractList源码,iterator()方法返回的是其中的内部类Itr。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式