内部类拥有其外围类的所有元素的访问权

tech2024-04-09  52

package Test6; public interface Selector { boolean end(); Object current(); void next(); } package Test6; public class Sequence { private Object[] items; private int next = 0; /** * 有参数的构造方法 * @param size */ public Sequence(int size){//int size = 10; items = new Object[size];//items[10] } /** * 往数组中添加元素 * @param x */ public void add(Object x){ if(next < items.length){ items[next ++] = x; } } /** * SequenceSelector实现Selector接口 * 此类的方法都用到了Object,这是个引用,并不是SequenceSelector的一部分, * 而是外围类中的一个private字段。内部类可以访问其外围类的方法和字段,就像 * 他们自己也拥有似的,带来了极大的方便。 * 所以内部类自动拥有对其外围类所有成员的访问权。怎么获得? * 当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个 * 指向那个外围类对象的引用。然后,在你访问此外围类的成员时,就是用那个引用来 * 选择外围类成员。 */ public class SequenceSelector implements Selector{ private int i = 0; /** * 判断是否是最后 * @return */ @Override public boolean end() { return i == items.length; } /** * 打印元素 * @return items[i]; */ @Override public Object current() { return items[i]; } /** * 往下走 */ @Override public void next() { if(i<items.length){ i++; } } } /** * 返回对象 * @return */ 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.println(selector.current()+" "); selector.next(); } } }
最新回复(0)