public class Sequence {
private Object[] items;
private int next = 0;
public Sequence(int size) {
items = new Object[size];
}
public void add(Object x) {
if (next < items.length) 
items[next++] = x;
}
private class SequenceSelector implements Selector {
private int i = 0;
public boolean end() {
return i == items.length;
}
public Object current() {
return items[i];
}
public void next() {
if (i < items.length) 
i++;
}
} public Selector selector {
return new SequenceSelector();
} public static void main(String[] args) {
Sequence sequence = new Sequence(10);
for (int i = 0; i < 10; i++) 
sequence.add(Integer.toString(i));
Selector selector = sequence.selector();
while (!selector.end()) {
System.out.print(selector.current() + " ");
selector.next();
}
}
}请大家帮忙看看这个main方法调用的过程能不能直接给我说清楚
我想了二天了.还是不知道怎么个过程.实在是看不懂.

解决方案 »

  1.   

    Selector 是类 不是接口
      

  2.   

    关键的地方是,内部类对象隐形的持有外包类对象的引用!
    Selector selector = sequence.selector();这句返回一个对象selctor 是一个内部类的对象,selector隐形的持有sequence这个对象的引用。所以slector 的方法能自由的访问sequence对象的任何成员,包括private的成员。所以selector自己的方法end(),next()可以顺利的执行。
      

  3.   

    这个程序的实现很象是集合类中的Iterator
      

  4.   

    少写了
    interface Selector {
      boolean end();
      Object current();
      void next();
    }
      

  5.   

    可以理解为SequenceSelector 就是Selector 的子类public Selector selector {
            return new SequenceSelector();
        }
    就是父类引用指向子类对象
    Selector 理解为 Iterator
    selector()理解为iterator()
      

  6.   

    用上面的代码编译后会出现错误:
    Sequence.java:33: 需要 ';'
        public Selector selector {
    只要把public Selector selector后面增加一个小括号(),即可正常运行这程序用到了内部类,这个内部类的作用是重写接口中的方法 main方法中的程序说明:    public static void main(String[] args) {
            Sequence sequence = new Sequence(10); //定义一个Sequence类的对象sequence,并指定item对象数组有10个记录
            for (int i = 0; i < 10; i++)    //用for 循环给对象数组item,从0到9分别赋予0到9的整型String对象。
                sequence.add(Integer.toString(i));
            Selector selector = sequence.selector();  
            while (!selector.end()) {
                System.out.print(selector.current() + " "); //输出结果为:0 1 2 3 4 5 6 7 8 9
                selector.next();
            }
        }
      

  7.   

    lz 这是thinking in java 上内部类的例题啊     有些错误先检查以下代码撒 那个public Selector selector后面明显少了一个()撒