`
李灵晖-raylee
  • 浏览: 129597 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-8.2 链接到外部类

 
阅读更多

这一章节我们来讨论一下内部类链接到外部类的几个方面。

上一章节主要展示了内部类封装一些实现,使得代码隐藏,但是内部类还可以链接到外部类,无需特殊条件,即可访问外部类的任何成员(属性域和方法),即它拥有外部类所有访问权限。

package com.ray.ch08;

public class Test {
	private int id = 0;

	public String name = "aaa";

	private void say() {
		System.out.println("Class Test Method say");
	}

	public void run() {
	}

	class Destination {
		private void print() {
			System.out.println(id);// 这里的id是int com.ray.ch08.Test.id
		}

		private void say() {
			say();// Class Test Method say
			System.out.println("Class Destination Method say");
		}

	}

	private class Content {
		private String a = name;

		private void run() {
			run();// Class Test Method run
		}
	}

}

上面的例子充分展现了内部类访问外部类的各种权限,从私有域到私有方法再到公有域和方法。


下面我们来展示一下内部类与迭代器模式之间的关系。

其实就是迭代器的实现。

package com.ray.ch08;

public class Sequence {
	private Object[] items;

	private int next = 0;

	public Sequence(int num) {
		items = new Object[num];
	}

	public void add(Object item) {
		if(next<items.length){
			items[next++] = item;
		}
	}

	private class SequenceSelector implements Selector {
		private int i = 0;

		@Override
		public boolean end() {
			return items.length == i;
		}

		@Override
		public void next() {
			if (items.length > i) {
				i++;
			}
		}

		@Override
		public Object current() {
			return items[i];
		}
	}

	public Selector getSelector() {
		return new SequenceSelector();
	}

	public static void main(String[] args) {
		Sequence sequence = new Sequence(10);
		for (int i = 0; i < 10; i++) {
			sequence.add(i);
		}
		Selector selector = sequence.getSelector();
		while (!selector.end()) {
			System.out.println(selector.current());
			selector.next();
		}
	}

}

interface Selector {
	boolean end();

	void next();

	Object current();
}

总结:这一章节主要讲述了内部类链接到外部类,以及迭代器的实现。


这一章节就到这里,谢谢。

-----------------------------------

目录




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics