首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java Iterator<E>的有关问题

2012-09-06 
java IteratorE的问题ListlistnewArraylist()list.add( aaa )list.add( bbb )Iteratoritlist.i

java Iterator<E>的问题
List list=new Arraylist();  
list.add( "aaa ");  
list.add( "bbb ");  
Iterator it=list.iterator();  
while(it.hasNext())  
{  
System.out.println(it.next());  
}  
Iterator接口中的方法都是没有方法体的抽象方法,所以hasNext()和it.next()没有实现,查看Arraylist()的JDK源码发现它也没有实现这些方法,唯一看到具体的实现是在其父类AbstractList这个类里,查找源代码可以发现,AbstractList这个类里有个叫Itr的内部类实现了Iterator接口的所有内容,可是Itr的内部类声明是:private class Itr implements Iterator<E>,也就是私有的,那么就不可以被子类继承。可为什么还是可以直接用it.hasNext()和it.next(),表示不明白,求解释?

[解决办法]
关键是list.iterator()这句话,
它执行了AbstractList里的

Java code
    public Iterator<E> iterator() {    return new Itr();    }
[解决办法]
list.iterator()返回了1个实例化Iterator的对象。
不管这个实例化的类是内部类还是什么,外面只使用了Iterator接口的方法,
例如
hasNext()
next()
这些方法又都是public的那么就可以使用的呀。

这就是接口的好处,外面调用的人不关心实现类的实现。
只要你实现了我的接口的方法,我就只调用那么些方法,不关心你怎么实现的。

热点排行