回調方法是類A調用類B的方法,然后B又在某個時候反過來調用類B的方法a,這個a就是回調方法.
上面這句話讀起來繞口且還是對於回調方法還是沒有什么實質性的理解,下面舉個例子來解釋回調方法:
兒子(Son)要睡午覺了,告訴媽媽(Mother)要一個小時之后叫他醒來,下面是兩個類的定義
1 public class Son { 2
3 public void sleep(Mother m,int time){ 4 System.out.println("son:sleep"); 5 m.call(this,time);//告訴媽媽多久叫醒自己
6 } 7
8 public void aware(){ 9 System.out.println("son:aware"); 10 } 11 }
1 public class Mother { 2
3 //這里簡單起見使用的是用i判斷
4 public void call(Son s,int time){ 5 int i=0; 6 while(i++==time); 7 System.out.println("mother:call"); 8 s.aware();//回調
9 } 10
11 }
測試代碼
1 public class Test { 2
3 public static void main(String[] args) { 4 Son s=new Son(); 5 Mother m=new Mother(); 6 s.sleep(m,100); 7 } 8 }
在兒子睡覺之前告訴媽媽經過time時間后叫醒自己(this),媽媽在到時間之后,叫醒兒子(s.aware()).這里兒子對應定義中的類A,媽媽對應定義中的類B,aware()方法就是回調方法.a
以下是個人對回調方法的理解:
回調使一個功能模塊更加靈活,比如上述例子中是兒子讓媽媽叫醒他,那么假如又多了一個爸爸也想讓媽媽叫醒他呢,這里又需要重載一個call,這里可能會有人說,使用多態實現啊!那假如不是兒子叫媽媽叫醒他自己,而是叫媽媽"叫醒"電視機呢,這里的電視機跟兒子總不會有同一個父類吧.而使用了回調方法,你只需要讓被叫醒的對象實現aware()方法即可,使功能模塊能夠更加靈活.
在許多框架中都都能看到回調的影子,比如spring在IOC容器初始化時,父容器會調用子容器的方法,子容器也會調用父容器的方法.