参考:https://blog.csdn.net/xiaanming/article/details/8703708
回调:A类中调用B类的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。
代码实例:
interface CallBack { public void solve(String result); } class Wang implements CallBack { private Li li; public Wang(Li li){ this.li = li; } public void askQuestion(final String question){ //这里用一个线程就是异步, new Thread(new Runnable() { @Override public void run() { li.executeMessage(Wang.this, question); } }).start(); //小网问完问题挂掉电话就去干其他的事情了,诳街去了 play(); } public void play(){ System.out.println("我要逛街去了"); } @Override public void solve(String result) { System.out.println("小李告诉小王的答案是--->" + result); } } class Li { public void executeMessage(CallBack callBack, String question){ System.out.println("小王问的问题--->" + question); //模拟小李办自己的事情需要很长时间 for(int i=0; i<10000;i++){ } String result = "答案是2"; callBack.solve(result); } } class TestHuiDiao { public static void main(String[]args){ Li li = new Li(); Wang wang = new Wang(li); wang.askQuestion("1 + 1 = ?"); } }
说明:
1)接口中的方法solve()方法就是回调方法。
2)自己的理解:
A类(Wang)实现了接口(CallBack,该接口有一个sovle()的方法),A类(Wang)持有B类(Li)的引用,在A类(Wang)中调用了B类(Li)中的某个方法C(executeMessage())同时在方法中将A的实例(Wang.this)传给方法B(Li),然后在B类(Li)中通过传入的A的实例(Wang.this)反过来调用A类(Wang)中的方法D(solve()),D(solve())这个方法就叫做回调方法。
3)直白理解:小王中有小李的实例作为属性,开启新的线程调用小李的方法C(并将小王的实例作为参数传入),在小李类中通过传入的小王的实例调用小王的方法,从而达到回调的作用。