回调是一种特殊的调用, 调用有三种方式:同步调用, 回调
回调就是在类A中持有一个接口的对象, 但是并不在A类中实现该接口的方法, 而是交给B类去实现, 但是B本身不会调用该方法, 而是供A类去使用.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class Activity implements IListener{
private Button mButton;
public void onCreate(){ mButton=new Button(); mButton.setOnClickListener(this); mButton.doClick(); }
@Override public void onClick() { StdOut.println("onClick"); } }
interface IListener{ public void onClick(); }
class Button{
IListener mListener;
public void setOnClickListener(IListener listener){ mListener=listener; }
public void doClick(){ mListener.onClick(); }
}
|
场景类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Client_Button { public static void main(String[] args){
Activity activity=new Activity(); activity.onCreate(); } }
--- onClick
|
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| interface Callback{ public void solve(String str); }
class B implements Callback{ private A a; public B(A a){ this.b=b; }
public void askQuestion(final String question){
a.doSomething(A.this,question);
}
@Override public void solve(String str) { StdOut.println("the answer is "+str); } }
class A{
void doSomething(Callback callback,String question){ StdOut.println("A gets question: "+question); StdOut.println("A do something"); callback.solve("solved"); } }
|
1 2 3 4 5 6 7 8
| public class Client_Java { public static void main(String[] args){ A a=new A(); B b =new B(a); b.askQuestion("a's question"); } }
|