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的那么就可以使用的呀。
这就是接口的好处,外面调用的人不关心实现类的实现。
只要你实现了我的接口的方法,我就只调用那么些方法,不关心你怎么实现的。