1 . 回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法
2 . 接口回调,回调的是接口的方法.这个方法就是回调方法
3 . 首先定义一个接口
package com.qf.demo6;
public interface Phone {
public void getResult(String result);
}
其次,创建二狗类,要提问问题,但是只能通过皮皮虾类接收问题,皮皮虾类接收问题之后,皮皮虾类里面接口对象调用二狗类中的回调方法(也就是phone.getResult()),输出信息
二狗类:
package com.qf.demo6;
/**
* 接口回调
* 二狗类中 想要数据,但是二狗类不能直接得到结果, 皮皮虾类中有结果
* 通过一个接口将数据回传
*
* 想要数据的类创建接口对象,并且重写抽象方法, 将接口对象 传递给有数据的类
*
* 有数据的类 通过接口对象 调用 重写的接口的方法
*
*
*
* @author Administrator
*
*/
public class TwoDog {
// 二狗要问问题
PiPiXia piPiXia = new PiPiXia();
public void askQuestion(){
piPiXia.accepQuestion("1+1=?",new Phone() {
public void getResult(String result) {// "2"
System.out.println(result);
}
});
}
// public void getResult(String result){
// System.out.println(result);
// }
}
皮皮虾类:
package com.qf.demo6;
/**
* 接口 当做 一个 传输数据工具
*
* @author Administrator
*
*/
public class PiPiXia {
public void accepQuestion(String question, final Phone phone){
System.out.println("我要睡觉呢,睡醒了再告诉你");
new Thread(new Runnable() {
public void run() {
System.out.println("一年以后, 皮皮虾睡醒了");
try {
Thread.sleep(30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("一年以后, 皮皮虾睡醒了");
phone.getResult("2");
}
}).start();
}
}
测试类:
package com.qf.demo6;
/**
* 二狗 1+1=?
* 给皮皮虾打电话
* 皮皮虾说我睡会觉, 睡醒了再告诉你
* 一年以后 皮皮虾属性了, 就想起来 二狗问的问题
* 想办法告诉二狗 结果是 2
*
*/
public class Test {
public static void main(String[] args) {
TwoDog twoDog = new TwoDog();
twoDog.askQuestion();
}
}