今天项目的Bug基本修改完成了,于是就对自己还未了解的回调函数进行了学习。就得到的结果来看,个人觉得回调就像多态一样,比如Boss叫员工去吃饭,但每个员工可能吃不同的食物。只不过,回调是对接口而言。简单来说就是,A对象调用了自己的方法a,方法a接收的参数是B接口的实例b,而在方法a中将执行接口B中的方法c。这样解释可能有点绕不过来,下面我们来看一个例子。

       比如宿舍的某个同学设置了一个闹铃,闹铃响时全宿舍的人都能听到,但是张三比较勤奋,听到铃声后起床了,李四比较懒,听到铃声后还要睡会。我们可以把闹铃发出的铃声看作是接口,张三和李四都实现了这个“接口”,闹铃到一定时间后就要“响铃”,响铃就要发出“铃声”,“铃声”就去叫人,至于人会做什么就是人本身的事情。下面看个代码。

1.接口CallPerson

 
  
  1. public interface CallPerson { 
  2.      
  3.     public abstract void doCallPerson (); 
  4.  

定义了一个“叫人”的方法。实现这个接口可理解成安装了闹铃。

2.类Zhangsan

 
  
  1. public class Zhangsan implements CallPerson { 
  2.      
  3.     String name = "Zhangsan"
  4.      
  5.     public String getName () { 
  6.         return name; 
  7.     } 
  8.  
  9.     @Override 
  10.     public void doCallPerson() { 
  11.         System.out.println(getName() + "听到铃声,勤鸟,起床了!"); 
  12.     } 
  13.  
  14.      

3.类Lisi

 
  
  1. public class Lisi implements CallPerson { 
  2.     String name = "Lisi"
  3.      
  4.     public String getName () { 
  5.         return name; 
  6.     } 
  7.  
  8.     @Override 
  9.     public void doCallPerson() { 
  10.         System.out.println(getName() + "听到铃声,懒猪,没起床!"); 
  11.     } 
  12.      

4.类Alarm

 
  
  1. public class Alarm { 
  2.      
  3.     //响铃
  4.     public void ring (CallPerson callPerson) { 
  5.         callPerson.doCallPerson(); 
  6.     } 
  7.  

5.Activity

然后我们在Activity里模拟闹铃开始响铃

 
  
  1. import android.os.Bundle; 
  2. import android.app.Activity; 
  3.  
  4. public class MainActivity extends Activity { 
  5.  
  6.     @Override 
  7.     public void onCreate(Bundle savedInstanceState) { 
  8.         super.onCreate(savedInstanceState); 
  9.         setContentView(R.layout.layout_main); 
  10.          
  11.         Alarm alarm = new Alarm(); 
  12.         Zhangsan zhangsan = new Zhangsan(); 
  13.         Lisi lisi = new Lisi(); 
  14.          
  15.         //模拟闹铃定时时间到,然后响铃 
  16.         alarm.ring(zhangsan); 
  17.         alarm.ring(lisi); 
  18.     } 
  19.  

 最后,我们来看看执行的结果

 
  
  1. 12-07 21:49:41.947: INFO/System.out(6107): Zhangsan听到铃声,勤鸟,起床了! 
  2. 12-07 21:49:41.947: INFO/System.out(6107): Lisi听到铃声,懒猪,没起床! 

好了,这就是我对回调的理解,如有不对之处望大家指出,谢谢!