闭包(Closure)和回调

 

  
  
  
  
  1. interface Teachable 
  2.     void work();     
  3. class Programmer 
  4.     private String name; 
  5.     public Programmer(){} 
  6.     public Programmer(String name) 
  7.     { 
  8.     this. name = name; 
  9.   } 
  10.   public void setName(String name) 
  11.   { 
  12.     this.name = name;    
  13.   } 
  14.   public String getName() 
  15.   { 
  16.     return name; 
  17.   } 
  18.   public void work() 
  19.   { 
  20.         System.out.println(name + "再灯下认真敲键盘。。。"); 
  21.   } 
  22. //========================================================= 
  23. class TeachableProgrammer extends Programmer 
  24.     public TeachaleProgrammer(){} 
  25.     public TeachaleProgrammer(String name) 
  26.     { 
  27.         super(name);     
  28.     }    
  29.     private void teach() 
  30.     { 
  31.         System.out.println(getName() + "教师在讲台上讲解。。。");   
  32.     } 
  33.     //内部类 
  34.     private class Closure implements Teachable 
  35.     { 
  36.         /* 
  37.             非静态内部了类回调外部类实现work方法,非静态内部类引用的作用仅仅是向 
  38.             客户类提供一个回调外部类的途径 
  39.         */   
  40.         public void work() 
  41.         { 
  42.             teach();     
  43.         } 
  44.     } 
  45.     //返回一个非静态内部类引用,允许外部类通过该非静态内部类引用来回调外部类方法 
  46.     public Teachable getCallbackReference() 
  47.     { 
  48.         return new Closure();    
  49.     } 
  50. public class TeachableProgrammerTest 
  51.     public static void main(String[] args) 
  52.     { 
  53.         TeachableProgrammer tp = new TeachableProgrammer("李刚"); 
  54.         //直接调用TeachableProgrammer类从Programmer类继承到的work方法 
  55.         tp.work(); 
  56.         //表面上调用的是Closure的work方法,实际上是回调TeachableProgrammer的teach方法 
  57.         tp.getCallbackReference().work(); 
  58.     }    

 

本文出自 “java程序猿的博客” 博客,转载请与作者联系!

你可能感兴趣的:(java)