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());
        }
    }
}
其中如下代码
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++);
            }
        };
是如何完成将String s遍历的?Iterator<Character> i = test("OPS"); 怎么就把OOPS赋给了Iterator<Character>?我没看见这个方法有循环体啊,还是由有继承什么的,请指教

解决方案 »

  1.   

    为什么是oops上次已经说了:至于为什么输出为: 
    OOPS 是因为类的初经顺序和多态造成的。 子类在初始化的时候会先初始化父类, 
    在初始化T next = nextElement(); 这句的时候,因为private int cursor = 0;还没有初始化,默认为0,所以nextElement()就为"o" cursor变为1,接着初始化子类private int cursor = 0,这句初始化后cursor 又变为0导致读了两次"o"如何完成将String s遍历的?这是因为next() 方法啊。。而next()方法又调用了nextElement() ,你也看到它每次返回指针所指示的那个字符。