【问题标题】:Overriding same method twice from same class从同一个类两次覆盖相同的方法
【发布时间】:2017-11-05 04:39:17
【问题描述】:

我正在了解 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();
    }

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

【问题讨论】:

    标签: java arraylist iterator


    【解决方案1】:

    不允许same 类重写相同的方法两次。在您的情况下,这是两个不同的类,即:

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

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

    【讨论】:

      【解决方案2】:

      您看到的第一个iterator() 方法属于ArrayList 类,但第二个不属于。

      属于SubList类,是ArrayList的内部类:

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

      因此它不会被同一个类覆盖两次。每个类都会覆盖一次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-12
        • 2013-01-19
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        相关资源
        最近更新 更多