我理解iterator()方法如何与ArrayList类一起使用。在ArrayList类中,我发现iterator()方法从同一个类AbstractList重写了两次。
public Iterator<E> iterator() {
return new Itr(); // Itr is an inner private class of
// ArrayList which
// implements Iterator interface .
}
public Iterator<E> iterator() {
return listIterator();
}
但这怎么可能?这里应该有一个已定义的错误。我很困惑。
答案 0 :(得分:4)
您看到的第一个iterator()
方法属于ArrayList
类,但第二个方法没有。
它属于SubList
类,它是ArrayList
的内部类:
private class SubList extends AbstractList<E> implements RandomAccess {
...
public Iterator<E> iterator() {
return listIterator();
}
...
}
因此,它不会被同一个类重写两次。每个班级都会覆盖一次。
答案 1 :(得分:3)
从相同类重复两次相同的方法不允许。在您的情况下,这是两个不同的类,即:
public class ArrayList<E> extends AbstractList<E>
private class SubList extends AbstractList<E> implements RandomAccess
而后者是前者的内部类,这就是为什么两者都可以使用相同签名的相同方法。