接口回调机制理解

定义

Java允许调用接口的方法,但前提是编译时接口的对象必须是一个具体的类,并且实现了接口。
当我们调用接口时,接口的具体子类的具体方法会被调用,这就是回调。

public interface Interface {

void printClassName();

}

public class A implements Interface {

B b = new B();

b.setListener(this);

@Override
public void printClassName() {

    System.out.println("This is class A!请告诉我时间");
}

}

public class B {

Interface mInterface;

public void setListener(Interface interface){

    this.mInterface = interface;
}

// B 在setListener里面接受到Interface后的某个时刻,执行showPrint
public void showPrint(){

    if(mInterface != null){
        mInterface.printClassName();
    }
}

}


接口回调应用场景:

A:A
B:中间人B
C:C
A new 一个中间人B,并告诉B:如果C想吃饭了就立刻告诉A;
B再注册到C中,时刻监听C。此时C持有B,并可以操作A的方法;
当C觉得饿,想吃饭了,B就告诉A:C想吃饭了;
A根据B的回报,点了外卖。


A:Activity
B:OnClickListener
C:Button

C 中预留有B的专属位置,但为null,即mOnClickListener=null;

public OnClickListener mOnClickListener

在A中new 一个对象B,并嘱咐B一旦C有点击事件,就告诉A;

把B注册到C中,实现对C的监听,此时C中B的专属位置不为null;

Button.setOnClickListener(B)
mOnClickListener=B

C中有点击触发,调用onClick(),也就是接口B中的onClick方法;

mOnClickListener.onClick(this)

B将监听情况告诉个A,A给出相应的动作、行为

    OnClickListener() {
         @Override
         public void onClick(View v) {
          //A听到后,发生的动作行为
         }
    }

让编译器知道,调用接口方法的时候,
去回调我们设置的OnClickListener子类的对应方法,即A中接口的实现类,
new View.OnClickListener() {
@Override
public void onClick(View v) {
// doSth 在这里
}
}

reference : http://www.cnblogs.com/Fndroid/p/5308713.html

如理解有偏差,欢迎指正!

你可能感兴趣的:(Java,Android)