java回调

作者: siyanGo | 来源:发表于2016-10-20 19:15 被阅读116次

    一 . 前言

    正在看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回调

      本文链接:https://www.haomeiwen.com/subject/grqfuttx.html