您的位置:首页 > 编程语言 > Java开发

接口回调机制理解

2017-09-21 22:21 190 查看
定义

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 回调机制