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方法调用的过程能不能直接给我说清楚
我想了二天了.还是不知道怎么个过程.实在是看不懂.
Selector selector = sequence.selector();这句返回一个对象selctor 是一个内部类的对象,selector隐形的持有sequence这个对象的引用。所以slector 的方法能自由的访问sequence对象的任何成员,包括private的成员。所以selector自己的方法end(),next()可以顺利的执行。
interface Selector {
boolean end();
Object current();
void next();
}
return new SequenceSelector();
}
就是父类引用指向子类对象
Selector 理解为 Iterator
selector()理解为iterator()
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();
}
}