接着上一章节,上一章节主要讲述的是因为多重继承,这一章节我们来结束另外一个原因:闭包和内部框架。
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,因此本系列文章将忽略这一部分。请谅解。
总结:这一章节补充了为什么需要内部类的另一个原因,还有给出详细的例子说明。
这一章节就到这里,谢谢。
-----------------------------------