迭代器为什么不定义成类,而定义为一个借口?
假设迭代器定义为一个类,我们就可以通过创建对象调用方法来实现集合的遍历。
但是,java中拥有很多种集合,他们的数据结构是各不相同的,所以遍历的方式应该是不一样的!
最终就没有定义为迭代器类,而无论你是哪种集合都应该具有遍历功能,包含(判断、获取等功能)
判断和获取等功能应该是每种集合都应该具备的,而具体的实现方式又不太一样
所以把这些特有的功能提取出来,而不提供具体的实现。这种方式就是接口!!
在真正的具体子类中,以内部类的方式实现
- ArrayList中迭代器的具体实现如下
public interface Inteator {
public abstract boolean hasNext();
public abstract Object next();
}
public interface Iterable {
Iterator iterator();
}
public interface Collection extends Iterable {
Iterator iterator();
}
public interface List extends Collection {
Iterator iterator();
}
public calss ArrayList implements List {
public Iterator iterator() {
return new Itr();
}
private class Itr implements Iterator { //接口的具体实现类
//包含了 所需功能 next() hasNext() 等
}
}
//编译看左边,运行看右边~~~