Java之链接外部类

本文探讨了Java中内部类的重要用途,特别是在与外围类建立连接时,内部类能够直接访问外围类的所有成员,无需额外条件。通过一个具体示例,展示了内部类如何在迭代器设计模式中发挥作用,实现对外部类的遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对外部类的链接

内部类的一个重要用途就是:当生成一个内部类的对象时,此对象与制造它的外围对象(enclosing object)之间就有了某种联系,所以它能够访问其外围对象的所有成员,而不需要任何特殊条件。除此之外,内部类还拥有其外围类的所有元素的访问权

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) {
		// TODO Auto-generated method stub
		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();
		}
	}
}

运行结果:
在这里插入图片描述
代码分析:在这呢,Sequence类只是一个固定大小的Object的数组,以类的形式包装了起来。我们可以调用add()在序列末增加新的Object。要获取Sequence中的每一个对象,可以使用Selector接口,这是**“迭代器”设计模式的例子。**
我们可以看到end()、current()和next()都用到了objects,也就说内部类可以访问外围类的方法和字段,如同自己拥有的。
那么好奇的读者不禁会想如何实现的呢?我们说当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会秘密获取一个指向外围类对象的引用,在你访问外围类的成员时,就是用那个引用来选择外围类的成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值