0秸应、 java 接口概念
? ? 一直對 java 接口概念比較模糊,因為平時的學(xué)習(xí)相對簡單碑宴,沒有用上软啼,所以就很模糊。最近想用了延柠,卻發(fā)現(xiàn)搞不懂祸挪。所以想練習(xí)一下,加深對 java 接口的理解贞间。
? ? java 接口概念: java 接口是一種抽象的類型贿条。里面定義了方法的名字,但是沒有實現(xiàn)增热。
interface Animal {???
????public void eat();????
????public void travel();
}
“接口感覺就是一些類似的事物共有的域或方法闪唆,就像有一個接口 Animal,里面有個方法eat钓葫,然后你每一個動物的類悄蕾,都去實現(xiàn)這個接口,因為每個動物都有各自的飲食方法础浮,這樣就增加了代碼的復(fù)用性帆调,不要再每一動物類里都要重新想一個名字來定義 eat《雇——來自“百度知道番刊、菜鳥教程”
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)然是求助小明肮酱邸漩符!讓小明來幫小紅做作業(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ā)起了求職又活。沒想到小明倒是懂得憐香惜玉苔咪,還趕緊安慰小紅說“我愿意幫你”。因為時間緊迫柳骄,小明已經(jīng)沒有時間教小紅怎么做了团赏,他對小紅說道:“我給你一個接口,你告訴我題目耐薯,我直接返回給你答案”舔清。說完丝里,小明趕緊定義了一個接口。
interface Helper {
? ? public int output(int a, b);
}
? ? 小明定義好了接口体谒,那么接口中的方法誰來實現(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);
????}
}
? ? 小明實現(xiàn)了這個接口,趕緊告訴小紅被去,并教小紅如何使用主儡。
class XiaoHong {???????????
? ? // 小紅為了使用小明的接口,定義了一個接口變量
????private Helper helper;
? ? // 并且通過傳入的 helper 實例化
? ? 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
? ? 小紅并沒有計算的能力寂汇,但是卻可以給出運算結(jié)果,這就是接口的作用捣染。所以骄瓣,接口可以用在這個情況:
? ? 1、功能模塊 B 想要使用功能模塊 A 的功能耍攘,那么 A 可以給出一個接口榕栏,讓 B 來調(diào)用。
? ? 以上就是我對 JAVA 接口的一種理解蕾各。
2扒磁、 JAVA 接口回調(diào)
? ? 還不理解,就是 return 嗎式曲?