网上看了不少接口回调的解释,感觉每个人的解释都不一样,有的人觉得好理解的,换个人可能就觉得不知所云。所以记录一下我自己的理解:
背景:A类想调用B类里的方法c来做某些事情,然后希望这件事情做完之后能调用A类的方法d返回给A类一个数据并让A类根据返回数据决定干什么事;
思路:A类调用B类方法,只需要持有一个B类对象的引用即可;如果希望方法c执行完成以后返回给A类数据,则需要在方法c最后去调用方法d,所以方法c里必须传入一个A类对象的引用;
流程:A类获得一个B类对象引用b
B b = new B();
调用B类的c方法并传入一个A类的对象的引用a
b.c(new A());
//或者
A a = new A();
b.c(a);
c方法执行完毕调用A类的d方法;
public void c(A a){
...
... a.d(); }
引申:如果是别的类也需要调用B类的c方法并想要获得返回值该怎么处理?如果还是按照这样来,那么在向c方法传值的时候就要修改类型,并且要修改最后的d方法;为了方便,这里定义一个接口E,借口E里有一个方法d;
interface E{ void d(); }
这样一来,只要实现了这个接口就一定有d方法,而且实现了这个接口的类就是这个接口的子类,向c方法里传入对象的类型问题也解决了;
public void c(E e){ ... }
暂时的理解就这样,以后有新的体会了再加。