Java Interface的真正用途

對 java 接口,在很多教程中的教學(xué),只是如下的介紹:

1、接口類只定義一些抽像的方法
2、要有實(shí)現(xiàn)類實(shí)些這些接口的方法,才能用
3、接口是可以多繼承
等等的學(xué)習(xí)........

然后,學(xué)到的就是接口好像和我們理解中的現(xiàn)實(shí)的接口完全無法對應(yīng)上。

下面是我在簡書中看到的比較好理解接口核心作用的兩個文:

作者:js果凍檸檬 鏈接:http://www.itdecent.cn/p/90c6ce8974aa

1、接口的作用
但是我認(rèn)為上面的解釋只給出了 java 接口中很小很小的作用,或者說不能體現(xiàn)“接口”這兩個字的含義。關(guān)于接口,我是這樣理解的,舉一個比較形象的例子:小明數(shù)學(xué)比較好,可以計算兩數(shù)相加,其方法為 add(int a, int b);小紅就不行了,數(shù)學(xué)比較差,自己做不來。但是數(shù)學(xué)老師又給小紅布置了數(shù)學(xué)作業(yè),而且明天必須要交作業(yè)。假如你是小紅,你會怎么辦?當(dāng)然是求助小明?。∽屝∶鱽韼托〖t做作業(yè)。雖然小明數(shù)學(xué)好,但是小紅求助小明的話小明會愿意幫小紅嗎?要是小明不愿意幫小紅而且還鄙視小紅,小紅得多尷尬啊。

class XiaoMing {    
    private int add(int a, int b) { 
        // 小明很聰明,知道怎么算,但是這個方法是私有的,不告訴其他人是怎么算的
        return a + b;    
    }
}

class XiaoHong {        
    private int add(int a, int b) {        
        // 小紅就比較笨啦,看到問題腦子一片漿糊。。不知道怎么算       
        return ??;        
    }

    public int write() {
    //    都不會算啊,怎寫得出答案嘛
        return ??;
    }
}

這是已經(jīng)深夜 22:00 了,小紅終于拉下了臉面,通過 QQ 向小明發(fā)起了求職。沒想到小明倒是懂得憐香惜玉,還趕緊安慰小紅說“我愿意幫你”。因?yàn)闀r間緊迫,小明已經(jīng)沒有時間教小紅怎么做了,他對小紅說道:“我給你一個接口,你告訴我題目,我直接返回給你答案”。說完,小明趕緊定義了一個接口。

interface Helper {
    public int output(int a, b);
}

小明定義好了接口,那么接口中的方法誰來實(shí)現(xiàn)呢?當(dāng)然是小明啊,是時候表演真正的技術(shù)了。

class XiaoMing implements Helper{            
    private int add(int a, int b) {            
        // 小明很聰明,知道怎么算,但是這個方式是私有的,不告訴其他人是怎么算的                return a + b;     
    }
    @Override

    public int output(int a, int b) {
        // 小明在接口中調(diào)用自己的計算方法,然后返回計算結(jié)果
        return add(a, b);
    }
}

小明實(shí)現(xiàn)了這個接口,趕緊告訴小紅,并教小紅如何使用。

class XiaoHong {           
    // 小紅為了使用小明的接口,定義了一個接口變量
    private Helper helper;
    // 并且通過傳入的 helper 實(shí)例化
    public void setHelper(Helper helper) {
        this.helper = helper;
    }
    private int add(int a, int b) {               
        // 小紅有了 helper, 告訴 helper a 和 b 的值,讓 helper 返回結(jié)果               
return 
helper.output(a, b);     
    }
}

所以,小紅要做的事就是把 helper 設(shè)置成小明,從而通過小明給出答案

public class Test1 {

    public static void main(String[] args) {
        XiaoMing xiaoMing = new XiaoMing();
        XiaoHong xiaoHong = new XiaoHong();
        xiaoHong.setHelper(xiaoMing);
        int result = xiaoHong.add(1, 2);
        System.out.println(result);
    }
}
輸出結(jié)果:3

小紅并沒有計算的能力,但是卻可以給出運(yùn)算結(jié)果,這就是接口的作用。所以,接口可以用在這個情況:
1、功能模塊 B 想要使用功能模塊 A 的功能,那么 A 可以給出一個接口,讓 B 來調(diào)用。

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

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

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