java回調(diào)

一 . 前言

正在看java編程思想,感覺對自己提升很大,重新總結(jié)下回調(diào)。

二.java 多態(tài)和向上轉(zhuǎn)型

下面的程序看起來有些奇怪,似乎對象都忘記自己的類型了,如果直接傳入Acar car=new Acar(); 可能更加直觀,但這樣如果car的種類較多,就會給代碼帶來很多負擔(dān)。 子類對象可以代替父類對象,這是多態(tài)所允許的

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();
        
    }

}

三.回調(diào)函數(shù)

回調(diào)就是在類A中持有一個B類的引用,在A中調(diào)用B的方法receive()傳入其中一個參數(shù)為A類型
這樣A,B就可以互相調(diào)用了。

四.具體實現(xiàn)

舉個例子:學(xué)生去向老師詢問問題,老師有時間的時候,去告訴學(xué)生。

public interface CallBack {
    //實現(xiàn)回調(diào)的接口
    public void response(String qusetion);

}

public class Student implements CallBack{
    

    
    //學(xué)生問老師問題
    public void askTeacher(Teacher teacher,String question){
        
        
        teacher.receive(this, question);
        
    }
    
    

    //得到老師的回復(fù)
    @Override
    public void response(String answer) {
        // TODO Auto-generated method stub
        System.out.println("The answer is"+answer);
        
    }
    
    //學(xué)生做別的事情
    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 {
                    
                    //老師忙完之后回復(fù)學(xué)生
                    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();

    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容