所谓回调接口就是能回调的接口!哈哈哈,不扯淡,举个生活中的例子来说明。
通俗解释
比如 你在网吧打LOL,你媳妇儿在家给你做饭吃。但是什么时候吃饭你不知道,并且吃什么你也不知道,你只是实现了一个你媳妇儿可以通知你回家吃饭的方法,当饭做好后你媳妇儿就调用这个方法,然后你就回家吃她给你准备得“美食”,而这个方法就叫做回调方法。那什么是回调接口呢,简单,回调方法的所在的接口就叫回调接口。
写与用
- 首先写一个接口命名为OnEatListener ,接着在其中写一个onEat方法,定义该方法的参数为一个String(具体吃什么你不知道,得你媳妇做好了才告诉你)。
/**
* 定义一个叫你吃饭的接口,
* 但是具体什么时候吃,吃什么,你是不知道的。
* Created by yby on 2017-02-22
*/
public interface OnEatListener {
public void onEat(String s);
}
- 在这里已经定义了一个叫你吃饭的接口,但是她怎么用这个接口呢?
她在做好饭后为了叫你吃饭,得创建一个OnEatListener接口的引用onEatListener,然后通过这个引用调用接口中的onEat方法来叫你吃饭,并传入具体吃的东西作为参数。代码如下:
/**
* 你媳妇儿做饭,做好了叫你吃
* Created by yby on 2017-02-22
*/
public class Home {
private OnEatListener onEatListener;//这里我们只是创建了一个接口的引用 但是并未实现该接口
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,你并未对它赋值,也并未实现它!
所以你先得实现这个接口然后通过你媳妇预先提供的setOnEatListener方法把你所实现的onEatListener传递给她,这样你就可以安心玩游戏了。
/**
* 你在网吧,
* 先把接口实现了,然后把你实现的接口设置到你媳妇儿那里(她必须给你提供一个set方法)
* 这样就可以安心的开始玩LOL
* Created by yby on 2017-02-22
*/
public class Wangba {
private void playGame() {
//实现接口
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("挑战泉水");
}
}
于是饭做好后,你媳妇儿就通过你实现好的接口来叫你吃饭了。