java中的闭包和回调(二)
TeachableProgrammer类:
- package com.home;
- public class TeachableProgrammer extends Programmer {
- public TeachableProgrammer() {
- super();
- }
- public TeachableProgrammer(String name) {
- super(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();
- }
- }
TestClosure测试类:
- package com.home;
- public class TestClosure {
- public static void main(String[] args) {
- TeachableProgrammer tp = new TeachableProgrammer("李刚");// 该示例来源于李刚老师的疯狂讲义
- // 直接调用TeachableProgrammer从Programmer类继承下来的work方法
- tp.work();
- // 表明上看是调用的Closure的work方法,实际上是通过通过work方法回调TeachableProgrammer的teach方法
- tp.getCallbackReference().work();
- }
- }
posted on 2017-09-06 21:34 1130136248 阅读(115) 评论(0) 收藏 举报
浙公网安备 33010602011771号