2017-06-04 11 views
3

ArrayListクラスでiterator()メソッドがどのように機能するかを理解していました。 ArrayListクラスで、同じクラスのAbstractListから2回オーバーライドされたiterator()メソッドが見つかりました。同じクラスから同じメソッドを2回オーバーライド

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

これはどのように可能ですか?既に定義されているエラーがあるはずです。私は混乱しています 。

答えて

4

最初に表示されるiterator()メソッドは、ArrayListクラスに属しますが、2番目のメソッドはありません。

ArrayListの内部クラスであるSubListクラスに属する:従ってそれは同じクラスで二回上書きされない

private class SubList extends AbstractList<E> implements RandomAccess { 
    ... 
    public Iterator<E> iterator() { 
     return listIterator(); 
    } 
    ... 
} 

。各クラスは一度それをオーバーライドします。

3

同じクラスから同じメソッドを2回オーバーライドするのは、ではなく、です。つまり、あなたのケースでは、これら2つの異なるクラスで、:

public class ArrayList<E> extends AbstractList<E> 
private class SubList extends AbstractList<E> implements RandomAccess 

と後者が前者の内部クラスで、それは両方が同じシグネチャを持つ同じメソッドを持つことができる理由です。

関連する問題