先贴代码:
interface Selector {
boolean end();
Object current();
void next();
} 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();
}
}
}然后截取书上的一段话,“最初看到SequenceSelector,可能会觉得它只不过是另一个内部类罢了。但请仔细观察它,注意方法end()、current()和next()都用到了objects,这是一个引用,它并不是SequenceSelector的一部分,而是外围类中的一个private字段。” 这里3个方法除了current()是用到object,其他2个哪里用到了?
interface Selector {
boolean end();
Object current();
void next();
} 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();
}
}
}然后截取书上的一段话,“最初看到SequenceSelector,可能会觉得它只不过是另一个内部类罢了。但请仔细观察它,注意方法end()、current()和next()都用到了objects,这是一个引用,它并不是SequenceSelector的一部分,而是外围类中的一个private字段。” 这里3个方法除了current()是用到object,其他2个哪里用到了?
解决方案 »
- 异常a different object with the same identifier value was already associated with
- for(File f:fileList)是什么意思?
- ResultSet结果集能否直接插入只知道表名的表
- 函数难题,如何求flMo
- jrockit崩溃文件,大家看看能看出什么问题吗?
- 网络编程的小问题,望指教
- 请问有谁懂得用JAVA语言来编写移动agent程序呢
- OutOfMemoryException与StackOverFlowError
- 关于二维数组的 问题(在线等!!!)
- 报错。。。
- J2ME/J2SE/J2SE,在编程技术有什么区别?
- jlable可以有点击事件吗
楼主【llm0528】截止到2008-07-26 21:01:04的历史汇总数据(不包括此帖):
发帖的总数量:61 发帖的总分数:1260 每贴平均分数:20
回帖的总数量:53 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:60 结贴的总分数:1240
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:20
结贴的百分比:98.36 % 结分的百分比:98.41 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
值得尊敬
但是我很奇怪,这不是内部类是什么?这不是一个实现了接口的内部类么?
定义了items变量。 public boolean end() { return i == items.length; }
public void next() { if(i < items.length) i++; }
这两内部类的方法都用到了外部类的items变量。
内不类拥有操作外部内的所有权限的变量,包括privae的,
这就是内部类的特殊地方
把书名贴一下.
很多书上的东西未必是准确的.
今天翻了一本书<java-JDK.数据库系统开发.Web开发>
作者把Overriding翻译成重载.把Overloading翻译成过载,不知道从哪抄的,把我郁闷坏了.
However,the inner class can access methods and fields from the enclosing class as if it owned them.This turns out to be very
conenient,as you can see in the preceding example.
这是你说的那段的最后两句.