Java内部类和外部类的通信探索

Java内部类和外部类的通信探索

1、内部类访问外部类的成员和方法

在内部类中,可以无障碍地访问外部类的所有成员和方法。
在下面的实验代码中,可以看到,内部类sl可以访问外部类的私有成员:sz 和 cur。
同时可以访问私有方法:privatePrintCur();

2、外部类访问内部类的成员和方法

在外部类中,同样可以自由访问内部类的成员和方法。
在实验代码中,外部类可以访问内部类的私有成员:在printCur方法中访问私有成员cur。

3、实验代码

// CommunicationTest.java
// To test the communication of
// outter class and inner class.
package blog.pdcxs007.innerClass;

interface selector {
	boolean hasNext();
	Object current();
	int next();
}

class Sequence {
	private int size;
	private Object[] sq;
	private int cur = 0;
	public Sequence(int sz) {
		size = sz;
		sq = new Object[sz];
	}
	public void add(Object obj) {
		if (cur < size)
			sq[cur++] = obj;
	}
	class sl implements selector {
		private int cur = 0;
		public boolean hasNext() {
			return cur < size;
		}
		public Object current() {
			//System.out.println("In selector.current()");
			privatePrintCur(this);
			//System.out.println("Out");
			return sq[cur];
		}
		public int next() {
			return cur++;
		}
	}
	public selector getSelector() {
		return new sl();
	}
	public void printCur(sl slc) {
		System.out.println("Current is: " + slc.cur);
	}
	private void privatePrintCur(sl slc) {
		System.out.println("Current is: " + slc.cur);
	}
}

public class CommunicationTest {
	public static void main(String[] args) {
		Sequence sq = new Sequence(5);
		selector slc = sq.getSelector();
		for(int i = 0; i < 5; i++)
			sq.add(Integer.toString(i));
		while(slc.hasNext()) {
			System.out.println(slc.current());
			sq.printCur((Sequence.sl) slc);
			slc.next();
		}
	}
}
运行结果如下:



你可能感兴趣的:(java,内部类,通信,外部类)