从同一个类重写相同的方法两次

时间:2017-06-04 06:40:54

标签: java arraylist iterator

我理解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();
    }

但这怎么可能?这里应该有一个已定义的错误。我很困惑。

2 个答案:

答案 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 

而后者是前者的内部类,这就是为什么两者都可以使用相同签名的相同方法。