Java 闭包机制
2015-11-01 19:47
288 查看
java闭包机制,它的实现需要两个部分闭包类(暂时称呼)+接口。闭包类:它是一个可以被调用的对象。它包含了一些作用域的内容(可以是参数,方法),它会自动拥有一个指向外部类的引用,通过它可以访问外部类的私有成员。
闭包机制可以解决,同一个方法做不同的操作的问题。
案例来自于这里写链接内容
一个Teachable接口和Programmer基类都提供了一个work方法,方法签名完全一样,功能不一样。Teachable的work方法用来执行教学,Programmer的work用来执行编程。那么假如有一个人既是教师又是程序员,也就是需要定义一个类既继承Programmer父类又要实现Teachable,问题在于这个类只能定义一个work方法,那怎么去实现这个需求呢,这里就可以利用内部类可以访问外部类的私有成员的特点来解决这个问题
Teachable接口
Programmer:
一个既编程又教书的类
测试代码
A:接口 定义一个要执行的方法
B:类 具有和接口一致的方法,但拥有自己功能
C:类 继承A类在其内定义一个内部类D 并且提供一个内部类的引用
D:内部类 实现接口A 调用接口中的方法,在方法中做自己的功能,例如回调外部类的方法
闭包机制可以解决,同一个方法做不同的操作的问题。
案例来自于这里写链接内容
一个Teachable接口和Programmer基类都提供了一个work方法,方法签名完全一样,功能不一样。Teachable的work方法用来执行教学,Programmer的work用来执行编程。那么假如有一个人既是教师又是程序员,也就是需要定义一个类既继承Programmer父类又要实现Teachable,问题在于这个类只能定义一个work方法,那怎么去实现这个需求呢,这里就可以利用内部类可以访问外部类的私有成员的特点来解决这个问题
Teachable接口
package com.home; /**执行工作的方式*/ public interface Teachable { public void work(); }
Programmer:
package com.home; public class Programmer { private String name; public Programmer() { super(); } public Programmer(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } /*工作是----正在编程*/ public void work() { System.out.println(name + "正在编程"); } }
一个既编程又教书的类
package com.home; public class TeachableProgrammer extends Programmer { public TeachableProgrammer() { super(); } public TeachableProgrammer(String name) { super(name);//继承父类的name参数 既引用了父类的name参数 } // 工作方式教学---教学工作任然由TeachableProgrammer定义 private void teach() { System.out.println(getName() + "正在讲课"); } /*内部类实现工作方式的接口 执行不同的工作方式*/ private class Closure implements Teachable { @Override public void work() { // 非静态内部类实现Teachable的work方法,作用仅仅是向客户类提供一个回调外部类的途径 teach(); } } // 返回一个非静态内部类的引用,允许外部类通过该引用来回调外部类的方法 public Teachable getCallbackReference() { return new Closure(); } }
测试代码
package com.home; public class TestClosure { public static void main(String[] args) { TeachableProgrammer tp = new TeachableProgrammer("XX");/ // 直接调用TeachableProgrammer从Programmer类继承下来的work方法 tp.work(); // 表明上看是调用的Closure的work方法,实际上是通过通过work方法回调TeachableProgrammer的teach方法 //改变了work方法的执行内容 tp.getCallbackReference().work(); } }
A:接口 定义一个要执行的方法
B:类 具有和接口一致的方法,但拥有自己功能
C:类 继承A类在其内定义一个内部类D 并且提供一个内部类的引用
D:内部类 实现接口A 调用接口中的方法,在方法中做自己的功能,例如回调外部类的方法
相关文章推荐
- spring复杂对象注入四种方式
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Error: could not open 'C:/Program Files/Java/jre6/lib/i386/jvm.cfg' 的处理方法
- 用exe4j将java程序打包成exe格式
- SpringMVC文件的上传与下载
- SpringIOC_对象的多实例和单实例
- Java四种读取和创建XML文档的例子教程
- Java os.name
- jfinal spring 整合 集成 事物 spring-jfinal
- java中的垃圾收集算法
- jfinal集成spring cxf做webservice服务
- spring 注解事务配置
- spring 注解事务配置
- PAT 1019. General Palindromic Number (20)
- eclipse 常用快捷键
- SpringIOC_创建对象的时机
- java学习笔记.07——内部类
- PAT 1018. Public Bike Management (30)
- java编程之美(一)
- java编程之美(一)