所謂回調(diào)接口就是能回調(diào)的接口!哈哈哈羡榴,不扯淡,舉個生活中的例子來說明运敢。
通俗解釋
比如 你在網(wǎng)吧打LOL校仑,你媳婦兒在家給你做飯吃。但是什么時候吃飯你不知道传惠,并且吃什么你也不知道迄沫,你只是實現(xiàn)了一個你媳婦兒可以通知你回家吃飯的方法,當(dāng)飯做好后你媳婦兒就調(diào)用這個方法卦方,然后你就回家吃她給你準(zhǔn)備得“美食”羊瘩,而這個方法就叫做回調(diào)方法。那什么是回調(diào)接口呢愿汰,簡單困后,回調(diào)方法的所在的接口就叫回調(diào)接口乐纸。
寫與用
- 首先寫一個接口命名為OnEatListener 衬廷,接著在其中寫一個onEat方法,定義該方法的參數(shù)為一個String(具體吃什么你不知道汽绢,得你媳婦做好了才告訴你)吗跋。
/**
* 定義一個叫你吃飯的接口,
* 但是具體什么時候吃,吃什么跌宛,你是不知道的酗宋。
* Created by yby on 2017-02-22
*/
public interface OnEatListener {
public void onEat(String s);
}
- 在這里已經(jīng)定義了一個叫你吃飯的接口,但是她怎么用這個接口呢疆拘?
她在做好飯后為了叫你吃飯蜕猫,得創(chuàng)建一個OnEatListener接口的引用onEatListener,然后通過這個引用調(diào)用接口中的onEat方法來叫你吃飯哎迄,并傳入具體吃的東西作為參數(shù)回右。代碼如下:
/**
* 你媳婦兒做飯,做好了叫你吃
* Created by yby on 2017-02-22
*/
public class Home {
private OnEatListener onEatListener;//這里我們只是創(chuàng)建了一個接口的引用 但是并未實現(xiàn)該接口
private void zuoFan() {
zhuFan();//煮飯
xiCai();//洗菜
chaoCai();//炒菜
call();//呼叫吃飯,傳入吃什么
}
private void zhuFan() {
System.out.println("煮飯");
}
private void xiCai() {
System.out.println("洗菜");
}
private void chaoCai() {
System.out.println("炒菜");
}
private void call() {
if (onEatListener != null) {
onEatListener.onEat("稀飯+泡菜");
}
}
public void setOnEatListener(OnEatListener onEatListener) {
this.onEatListener = onEatListener;
}
}
- 這時她就可以叫你吃飯了嗎漱挚?不行翔烁!這時叫你吃飯無效。因為onEatListener這個引用所指向的是null旨涝,你并未對它賦值蹬屹,也并未實現(xiàn)它!
所以你先得實現(xiàn)這個接口然后通過你媳婦預(yù)先提供的setOnEatListener方法把你所實現(xiàn)的onEatListener傳遞給她白华,這樣你就可以安心玩游戲了慨默。
/**
* 你在網(wǎng)吧,
* 先把接口實現(xiàn)了衬鱼,然后把你實現(xiàn)的接口設(shè)置到你媳婦兒那里(她必須給你提供一個set方法)
* 這樣就可以安心的開始玩LOL
* Created by yby on 2017-02-22
*/
public class Wangba {
private void playGame() {
//實現(xiàn)接口
OnEatListener onEatListener = new OnEatListener() {
@Override
public void onEat(String s) {
System.out.println("回家吃" + s);
}
};
Home home = new Home();
home.setOnEatListener(onEatListener);
lol();//安心玩游戲
}
private void lol() {
System.out.println("五殺");
System.out.println("挑戰(zhàn)泉水");
}
}
于是飯做好后业筏,你媳婦兒就通過你實現(xiàn)好的接口來叫你吃飯了。