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

页面导航:首页 > 软件编程 > Java编程 > 从头认识java-8.11 为什么需要内部类?(2)

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

来源: 作者: 时间:2016-01-21 09:39 【

接着上一章节,上一章节主要讲述的是因为多重继承,这一章节我们来结束另外一个原因:闭包和内部框架。1 闭包闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不

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

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,因此本系列文章将忽略这一部分。请谅解。

 

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

 

 

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<