java回调

一 . 前言

正在看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();

    }

}

你可能感兴趣的:(java回调)