今天Android項目的Bug基本修改完成了,於是就對自己還未了解的回調函數進行了學習。就得到的結果來看,個人覺得回調就像多態一樣,比如Boss叫員工去吃飯,但每個員工可能吃不同的食物。只不過,回調是對接口而言。簡單來說就是,A對象調用了自己的方法a,方法a接收的參數是B接口的實例b,而在方法a中將執行接口B中的方法c。這樣解釋可能有點繞不過來,下面我們來看一個例子。
比如宿捨的某個同學設置了一個鬧鈴,鬧鈴響時全宿捨的人都能聽到,但是張三比較勤奮,聽到鈴聲後起床了,李四比較懶,聽到鈴聲後還要睡會。我們可以把鬧鈴發出的鈴聲看作是接口,張三和李四都實現了這個“接口”,鬧鈴到一定時間後就要“響鈴”,響鈴就要發出“鈴聲”,“鈴聲”就去叫人,至於人會做什麼就是人本身的事情。下面看個代碼。
1.接口CallPerson
- publicinterface CallPerson {
- publicabstractvoid doCallPerson ();
- }
定義了一個“叫人”的方法。實現這個接口可理解成安裝了鬧鈴。
2.類Zhangsan
- publicclass Zhangsan implements CallPerson {
- String name = "Zhangsan";
- public String getName () {
- return name;
- }
- @Override
- publicvoid doCallPerson() {
- System.out.println(getName() + "聽到鈴聲,勤鳥,起床了!");
- }
- }
3.類Lisi
- publicclass Lisi implements CallPerson {
- String name = "Lisi";
- public String getName () {
- return name;
- }
- @Override
- publicvoid doCallPerson() {
- System.out.println(getName() + "聽到鈴聲,懶豬,沒起床!");
- }
- }
4.類Alarm
- publicclass Alarm {
- //響鈴
- publicvoid ring (CallPerson callPerson) {
- callPerson.doCallPerson();
- }
- }
5.Activity
然後我們在Activity裡模擬鬧鈴開始響鈴
- import android.os.Bundle;
- import android.app.Activity;
- publicclass MainActivity extends Activity {
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.layout_main);
- Alarm alarm = new Alarm();
- Zhangsan zhangsan = new Zhangsan();
- Lisi lisi = new Lisi();
- //模擬鬧鈴定時時間到,然後響鈴
- alarm.ring(zhangsan);
- alarm.ring(lisi);
- }
- }
最後,我們來看看執行的結果
- 12-07 21:49:41.947: INFO/System.out(6107): Zhangsan聽到鈴聲,勤鳥,起床了!
- 12-07 21:49:41.947: INFO/System.out(6107): Lisi聽到鈴聲,懶豬,沒起床!
好了,這就是我對回調的理解,如有不對之處望大家指出,謝謝!