java 回調(通俗易懂的解析)

看了一中午,終於把Java 的回調給弄懂了。感謝pi9nc的博客http://blog.csdn.net/pi9nc/article/details/23169357。首先看兩張圖。java


B同步調用A的方法程序員



上面的圖很清晰的解釋了回調的定義:被調用的接口被調用時也會調用對方的接口。框架

某程序員寫了一個封裝好的程序A(框架)。另外一個程序員寫了一個程序B,用到了A裏面的方法,可是呢,A裏面的方法不夠用,可是又不能改A,因此第二個程序員在本身的程序中補充了一個方法讓A能夠調用它(固然是在A須要新補充方法結果的狀況下,要否則B直接本身調用本身補充的方法不就好了),這就是回調了。問題來了,那麼要接口作什麼。這裏要注意的是A在封裝以前已經寫好了接口,也就是它已經預知了本身的能力有限,提供個接口,讓廣大的程序員一塊兒來豐富它的功能。這裏就涉及到具體怎麼實現回調了。下面是個簡單的程序:函數

/**
 * Created by xdlichen on 9/9/2015.
 */
interface PrintHello{                                     //A事先留好的接口PrintHello
    void printhello();
}
class A{
    private  PrintHello callbackReference;
    A(PrintHello i){callbackReference=i;}
    void callback(){callbackReference.printhello();}       //回調函數callback()
}
public class B implements PrintHello{                                     
    public void printhello(){System.out.println("Hello!");}  //B本身實現了接口中的方法
    public static void main(String[] args){
        B b=new B();
        A a=new A(b);a.callback();                           //A經過回調函數來調用B中新寫的方法
    }
}
輸出:Hello!