一 . 前言
正在看java编程思想,感觉对自己提升很大,重新总结下回调。
二.java 多态和向上转型
下面的程序看起来有些奇怪,似乎对象都忘记自己的类型了,如果直接传入Acar car=new Acar(); 可能更加直观,但这样如果car的种类较多,就会给代码带来很多负担。 子类对象可以代替父类对象,这是多态所允许的
interface Car{
void name();
}
class Acar implements Car{
@Override
public void name() {
// TODO Auto-generated method stub
System.out.println("a");
}
}
class Bcar implements Car{
@Override
public void name() {
// TODO Auto-generated method stub
System.out.println("b");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test dsp=new Test();
Car car=new Acar();
dsp.getName(car);
}
public void getName(Car car) {
// TODO Auto-generated method stub
car.name();
}
}
三.回调函数
回调就是在类A中持有一个B类的引用,在A中调用B的方法receive()传入其中一个参数为A类型
这样A,B就可以互相调用了。
四.具体实现
举个例子:学生去向老师询问问题,老师有时间的时候,去告诉学生。
public interface CallBack {
//实现回调的接口
public void response(String qusetion);
}
public class Student implements CallBack{
//学生问老师问题
public void askTeacher(Teacher teacher,String question){
teacher.receive(this, question);
}
//得到老师的回复
@Override
public void response(String answer) {
// TODO Auto-generated method stub
System.out.println("The answer is"+answer);
}
//学生做别的事情
public void play() {
System.out.println("play....");
}
}
public class Teacher {
public void receive(CallBack callBack,String question){
System.out.println("The question is "+question);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//do other things
try {
//老师忙完之后回复学生
Thread.sleep(4096);
callBack.response("2");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student student=new Student();
Teacher teacher=new Teacher();
student.askTeacher(teacher,"1+1=?");
student.play();
}
}
网友评论