Java 从同一类重写同一方法两次

Java 从同一类重写同一方法两次,java,arraylist,iterator,Java,Arraylist,Iterator,我了解迭代器()方法如何与ArrayList类一起工作。在ArrayList类中,我发现迭代器()方法从同一个类AbstractList重写了两次 public Iterator<E> iterator() { return new Itr(); // Itr is an inner private class of // ArrayList which

我了解迭代器()方法如何与ArrayList类一起工作。在ArrayList类中,我发现迭代器()方法从同一个类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();
    }
公共迭代器迭代器(){
return new Itr();//Itr是的内部私有类
//ArrayList哪个
//实现迭代器接口。
}
公共迭代器迭代器(){
返回listIterator();
}
但这怎么可能呢?这里应该有一个已经定义的错误。我很困惑。

您看到的第一个
迭代器()
方法属于
ArrayList
类,但第二个不属于

它属于
子列表
类,它是
数组列表
的内部类:

private class SubList extends AbstractList<E> implements RandomAccess {
    ...
    public Iterator<E> iterator() {
        return listIterator();
    }
    ...
}
私有类子列表扩展了AbstractList实现了随机访问{
...
公共迭代器迭代器(){
返回listIterator();
}
...
}

因此,它不会被同一类重写两次。每个类重写一次。

不允许从同一类重写同一方法两次。在您的案例中,这是两个不同的类,即:

public class ArrayList<E> extends AbstractList<E>
private class SubList extends AbstractList<E> implements RandomAccess 
公共类ArrayList扩展了AbstractList
私有类子列表扩展了AbstractList,实现了随机访问
后者是前者的一个内部类,这就是为什么两者都可以有具有相同签名的相同方法