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

从头认识java-8.11 为什么需要内部类?(2)

 
阅读更多

接着上一章节,上一章节主要讲述的是因为多重继承,这一章节我们来结束另外一个原因:闭包和内部框架。

1.闭包

闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。

其实是说白了,闭包的作用就是,之前你已经建立了对象,而且在对象里面存储了某些状态,然后现在你通过内部类,拿到对象的引用,从而取得现有状态,用在当前的代码里面。

package com.ray.ch08;

public class MyClass extends Test2 {

	private int id = 0;

	@Override
	public void test() {
		super.test();
		id++;
		System.out.println(id);
	}

	public Test1 getClosure() {
		return new Closure();
	}

	private class Closure implements Test1 {
		@Override
		public void test() {
			MyClass.this.test();//我们在这里取回现在对象的引用。
		}
	}

	public static void main(String[] args) {
		MyClass myClass = new MyClass();
		myClass.test();
		Test1 myClass2 = myClass.getClosure();
		myClass2.test();
		myClass2.test();
		Test1 myClass3 = myClass.getClosure();
		myClass3.test();
	}

}

interface Test1 {
	void test();
}

abstract class Test2 {
	public void test() {
		System.out.println("Test2 test");
	};
}

输出:

Test2 test
1
Test2 test
2
Test2 test
3
Test2 test
4

从输出的上面看出,id的值一直都在变化,那么其实对象的状态一直都在改变,然后我们引用的都是同一个对象。


2.内部框架

这里主要使用在swing上面,特别是事件上面,因为大部分的时候我们都不需要swing,因此本系列文章将忽略这一部分。请谅解。


总结:这一章节补充了为什么需要内部类的另一个原因,还有给出详细的例子说明。


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

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

目录


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics