import java.util.Iterator;
import java.util.NoSuchElementException;public abstract class AbstractIterator<T> implements Iterator<T> {    T next = nextElement();    public boolean hasNext() {
        return next != null;
    }    public T next() {
        if (next == null) {
            throw new NoSuchElementException();
        }
        T result = next;
        next = nextElement();
        return result;
    }    public void remove() {
        throw new UnsupportedOperationException();
    }    protected abstract T nextElement();    private static Iterator<Character> test(final String s) {
        return new AbstractIterator<Character>() {            private int cursor = 0;            protected Character nextElement() {
                return cursor == s.length() ? null : s.charAt(cursor++);
            }
        };
    }    public static void main(String[] args) {
        for (Iterator<Character> i = test("OPS"); i.hasNext();) {
            System.out.print(i.next());
        }
    }
}为什么输出OOP?有一个这样的贴子不过我看不懂,还有
 return new AbstractIterator<Character>() {            private int cursor = 0;            protected Character nextElement() {
                return cursor == s.length() ? null : s.charAt(cursor++);
            }
        };
这个局部类是什么意思啊,这个类的构造器在哪。

解决方案 »

  1.   

    那是个匿名的内部类,return new ?如果?是一个抽象类的话这个类就是它的一个子类,
    ?是一个接口的话就实现了该接口。 
      

  2.   

    return new AbstractIterator <Character>() {             private int cursor = 0; //类似是个指针            protected Character nextElement() {//返回s的每一个字符 
                    return cursor == s.length() ? null : s.charAt(cursor++); 
                } 
            };
    内部类就是new构造的啊
      

  3.   

    至于为什么输出为:
    OOPS是因为类的初经顺序和多态造成的。子类在初始化的时候会先初始化父类,
    在初始化T next = nextElement(); 这句的时候,因为private int cursor = 0;还没有初始化,默认为0,所以nextElement()就为"o" cursor变为1,接着初始化子类private int cursor = 0,这句初始化后cursor 又变为0导致读了两次"o"