《疯狂Java讲义》——闭包和回调
2016-03-06 17:09
316 查看
非静态内部类不仅记录了其外部内的详细信息,还保留了一个创建非静态内部类对象的引用,并且可以调用外部类的private成员,可以把非静态内部类当成面向对象领域的闭包。于是客户类可以通过非静态内部类的引用来调用外部类,即回调。
//教师接口 interface Teachable { void work();//work方法 } //程序员类 class Programmer { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Programmer(){} public Programmer(String name) { this.name = name; } //work方法 public void work() { System.out.println(name + "programming"); } } //Programer类的子类 class TeachableProgrammer extends Programmer { public TeachableProgrammer(){} public TeachableProgrammer(String name) { super(name);//调用其父类含参的构造方法 } //私有的teach方法 private void teach() { System.out.println("teaching"); } //非静态内部类实现教师接口 private class Closure implements Teachable { //实现其work方法 public void work() { teach();//调用外部类的私有的teach方法 } } //返回内部类的实例 public Teachable getCallbachReference() { return new Closure(); } } public class Test{ public static void main(String[] args) { TeachableProgrammer tp = new TeachableProgrammer("Jane"); tp.work();//调用继承自父类的work方法 //表面上调用的是Closure类的work方法 //实际上调用的是TeachableProgrammer的teach方法 tp.getCallbachReference().work(); } }
相关文章推荐
- 《深入理解Java虚拟机》笔记
- 20145327 《Java程序设计》第一周学习总结
- eclipse使用外部maven时multiModuleProjectDirectory错误解决
- 20145310 《Java程序设计》第1周学习总结
- myeclipse中使用maven
- Spring框架学习之IOC(二)
- Spring框架学习之IOC(一)
- 合并两个递增排序的链表
- SpringMVC中的controller默认是单例的原因
- Java中String
- Java基础知识总结
- spring整合JMS(7)
- java 中集合和数组互相转换
- java设计优化之单例模式
- JAVA SAX(流读取方式) 读取xml文档 简单列子
- java多线程网页下载代码
- 华为机试题--24点游戏--In Java
- JavaMail
- Java中重载和重写的区别
- Java [Leetcode 122]Best Time to Buy and Sell Stock II