簡單說明
打個比方,就好比有兩個類A,B,他們分別有方法a(),a2()跟b()
A的方法a()調(diào)用了B的方法b(),然后b()中又調(diào)用回A的方法a2(),這么一來一回的,就是回調(diào)機制的過程了。

回調(diào).png
簡單例子
就比如小明要約小美去看電影,結(jié)果小美要先化妝,等小美化好妝后,再通知小明出發(fā)。
public class Mei {
public void makeUp(){
System.out.println("小美化妝");
Ming ming = new Ming();
// B 調(diào)用 A 的方法
ming.watchMovie();
}
}
public class Ming {
public void invite(){
System.out.println("小明邀請小美去看電影");
Mei mei = new Mei();
// A 調(diào)用 B 的方法
mei.makeUp();
}
public void watchMovie(){
System.out.println("兩人一起去看電影");
}
}

測試結(jié)果
回調(diào)(接口實現(xiàn))
public interface Invitation {
// 看電影
public void watchMovie();
}
public class Mei {
public void makeUp(Invitation invitation){
System.out.println("小美化妝");
// B 調(diào)用 A 的方法
invitation.watchMovie();
}
}
public class Ming implements Invitation{
public void invite(){
System.out.println("小明邀請小美去看電影");
Mei mei = new Mei();
// A 調(diào)用 B 的方法
mei.makeUp(this);
}
@Override
public void watchMovie(){
System.out.println("兩人一起去看電影");
}
public static void main(String[] args) {
Ming ming = new Ming();
ming.invite();
}
}
異步回調(diào)
前面的兩個例子中,都是小明在喊完小美之后,就一直在干等著小美化妝,這是屬于同步行為,但一般而言,小明正常都是在等待的過程中干點自己的事情,比如玩手機什么的,在等待的過程中做別的事情,這就屬于異步回調(diào)。
public interface Invitation {
// 看電影
public void watchMovie();
}
public class Mei {
public void makeUp(Invitation invitation){
System.out.println("小美化妝");
// 要實現(xiàn)異步,則是需要多線程的幫忙
new Thread(new Runnable() {
@Override
public void run() {
try{
// 等待的期間小明在玩手機
play();
Thread.sleep(5000);
System.out.println("XX分鐘過后");
}catch (InterruptedException e){
e.printStackTrace();
}
// 化完妝了,告訴小明可以一起去看電影了
invitation.watchMovie();
}
}).start();
}
public void play(){
System.out.println("小明在玩手機");
}
}
public class Ming implements Invitation{
public void invite(){
System.out.println("小明邀請小美去看電影");
Mei mei = new Mei();
// A 調(diào)用 B 的方法
mei.makeUp(this);
}
@Override
public void watchMovie(){
System.out.println("兩人一起去看電影");
}
public static void main(String[] args) {
Ming ming = new Ming();
ming.invite();
}
}

測試結(jié)果