一、定义
回调就是把函数指针做为参数传入,如函数A做为参数传入函数B,由B函数决定何时、何地调用函数A,
function A()
function B(A)
{
call A()
}
就是把A传给B,由B决定什么时候调用。
二、用途
一个通俗的例子如下:
你饿了,想吃饭,就一会去问你妈一声"开饭没有啊?"这就正常函数调用。但是今天你妈包饺子,,花的时间比较长,你跑啊跑啊,就烦了。于是你给你妈说,我先出去玩会,开饭的时候打我手机。等过了一阵,你妈给你打电话说"开饭啦,快回来吃饭吧!"。其中,你告诉你妈打手机找你,就是你把回调函数句柄保存到你妈的动作。你妈打电话叫你,就是个回调过程。
三、java中实现回调
java中如何实现回调?答案是接口方式:
1、定义一个接口phone,妈妈通过这个接口来通知孩子
package test1;
public interface phone {
public void eat();
}
2、定义一个孩子类,实现上面这个接口,供妈妈调用
package test1;
public class child implements phone
{
public void eat()
{
System.out.println("孩子吃的很happy~~~");
}
}
3、定义一个妈妈类
package test1;
public class mum {
phone phone1;
//将child作为参数传进来,这里传进来的实际是接口phone,由于child实现了phone,因此相当于将child作为参数传递了进来
public void setCallback(phone phone1)
{
this.phone1 =phone1;
}
//通知child
public void callChild() throws Exception
{
System.out.println("开始包饺子");
Thread.sleep(3000);
System.out.println("饺子包好了");
System.out.println("打电话给孩子,过来吃饺子了");
phone1.eat();
}
//主函数
public static void main(String[] args) throws Exception
{
child child1=new child();
mum mum1=new mum();
mum1.setCallback(child1);
mum1.callChild();
}
}
运行mum类,输出如下:
开始包饺子
饺子包好了
打电话给孩子,过来吃饺子了
孩子吃的很happy~~~