Iterator it = c.iterator()
当在执行这行语句时,它是底层是怎么样子的?首先Collection extends Itrable,接口继
承接口,而Itrable中有一个抽象方法, Iterator iterator(),其返回值是Iterator,
Iterator接口中有三个抽象方法,hasNext(),next(),remove(),那么,Collection就应该
重写这个方法,但是它是一个接口,接口中只有抽象方法,我们应该看看它的子类有没有做
这个事情,我们发现List接口继承了Collction,那么它应该重写这个方法吧,但是,它是一
个接口,也不行,所以我们应该去看看它的子类,这时我们发现了ArrayList,ArrayList
implements List,这说明ArrayList是一个实现类,类中肯定重写了父接口的方法,
public Iterator iterator(){
return new Itr();
}
这是什么?返回值不是Iterator么?它返回一个 new Itr()是什么鬼?
别急,当我们看到一个类的返回值是一个接口或者抽象类时,那么它肯定返回的是一个子类对象,
private class Itr implements Iterator {
public boolean hasNext() {.....}
public Object next() {......}
public void remove() {......}
}
Itr是不是Iterator的一个子类对象?类中是不是重写了hasNext()、next()、remove()方法?当然现在都看不懂方法实现
那么当我们在执行
it.hasNext()时,编译看左边,Iterator中是不是有hasNext()方法?运行看右边子类Itr中是不是重写有hasNext()方法?
然后就是方法体实现的事情了。。