對 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)用。