日期:2014-05-20  浏览次数:20736 次

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的那么就可以使用的呀。

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