java中 介面的作用是什麼

2021-07-11 23:48:50 字數 3267 閱讀 8335

介面就是個招牌。

比如說你今年放假出去杭州旅遊,玩了一上午,你也有點餓了,突然看到前面有個店子,上面掛著kfc,然後你就知道今天中飯有著落了。

kfc就是介面,我們看到了這個介面,就知道這個店會賣炸雞腿(實現介面)。

那麼為神馬我們要去定義乙個介面涅,這個店可以直接賣炸雞腿啊(直接寫實現方法),是的,這個店可以直接賣炸雞腿,但沒有掛kfc的招牌,我們就不能直接簡單粗暴的衝進去叫服務員給兩個炸雞腿了。

要麼,我們就要進去問,你這裡賣不賣炸雞腿啊,賣不賣漢堡啊,賣不賣聖代啊(這就是反射)。很顯然,這樣一家家的問實在是非常麻煩(反射效能很差)。

要麼,我們就要記住,中山路108號賣炸雞,黃山路45號賣炸雞(硬編碼),很顯然這樣我們要記住的很多很多東西(**量劇增),而且,如果有新的店賣炸雞腿,我們也不可能知道(不利於擴充套件)。

介面的作用對於很多新手來說很不容易理解,我給大家舉個例子。

介面只是乙個規範,所以裡面的方法都是空的。

假如我開了乙個寵物糧店,宣告所有寵物都可以來我這裡買糧食,這就相當於乙個介面,

public inte***ce petrestaurant

當乙隻狗看到了,知道自己是寵物,所以它去實現這個介面

public class dogpet implements petrestaurant

}當乙隻貓看到了,知道自己也是寵物,所以也去實現這個介面

public class catpet implements petrestaurant

}當狗和貓來我的店之前,我是不知道他們到底是什麼,但是當他們來到我的店,我就知道乙個要貓糧食,乙個要**食。因為他們都實現了 我這個介面,都可以買。下面這個類相當於乙個接待顧客的類,即店小二,他接待所有實現了我這個寵物店介面的動物,傳進來乙個petrestaurant 型別的寵物,注意,這個petrestaurant 是介面

public class test

}好了,這個時候我這個老闆出現了,我可以給他們賣糧食了,相當於測試類

public class tests

}這樣執行的結果就是

我是貓,我要買貓糧

我是狗,我要買狗娘

你知道嗎,整個過程我這個店主其實根本不知道來的到底是貓是狗還是其他什麼,我只要有乙個店小二,把這些來的不知什麼動物都全部交給店小二,店小二就知道怎麼去賣了,因為這些狗啊貓啊都實現了我這個寵物店的介面,而店小二就負責接待所有實現了我這個介面的動物。這就有乙個好處,假如明天來了一頭小豬,只要它實現了我這個介面,我只管交給店小二處理就ok了,我這個店小二根本不需要變化,我這個店主也只需要例項化一下這個動物就ok

你想,假如沒有介面,會怎麼辦,來乙個貓,我要去創造乙個貓,還要例項化,來乙隻狗,我要建立乙隻狗,同樣要例項化,還要配備專門的店小二去接待,就會相當麻煩

「 介面是個規範」,這句沒錯。 「

不如直接就在這個類中寫實現方法豈不是更便捷」,你怎麼保證這個介面就乙個類去實現呢?如果多個類去實現同乙個介面,程式怎麼知道他們是有關聯的呢?

既然不是乙個類去實現,那就是有很多地方有用到,大家需要統一標準。甚至有的程式語言(object-c)已經不把介面叫 inte***ce,直接叫 protocol。

統一標準的目的,是大家都知道這個是

做什麼的,但是具體不用知道具體

怎麼做

比如說:

我知道 comparable 這個介面是用來比較兩個物件的,那麼如何去比較呢?

數字有數字的比較方法,字串有字串的比較方法,學生(自己定義的類)也有自己的比較方法。

然後,在另外乙個負責物件排序(不一定是數字喔)的**裡面,肯定需要將兩個物件比較。

這兩個物件是什麼型別呢?

object a,b?肯定不行,a > b 這樣的語法無法通過編譯。

int a,b?也不行?一開始就說了,不一定是數字。

....

所以,comparable 就來了。他告訴編譯器,a b 兩個物件都滿足 comparable 介面,也就是他們是可以進行比較的。具體怎麼比較,這段程式不需要知道。

所以,他需要一些具體的實現,comparable 介面有乙個方法,叫 compareto。那麼這個方法就是用來取代 這樣的運算子。

因為運算子是編譯器保留給內建型別(整數、浮點數)進行比較用的,而不是乙個廣義的比較運算。

如果你可以明白 jdk 自身庫裡面諸如 comparable 這樣已經有的介面,那麼就很容易理解自己在開發程式的時候為什麼需要用到介面了。

陳志明

一層一層抽象上去然後進行更方便地管理。

「 介面是個規範」,這句沒錯。 「

不如直接就在這個類中寫實現方法豈不是更便捷」,你怎麼保證這個介面就乙個類去實現呢?如果多個類去實現同乙個介面,程式怎麼知道他們是有關聯的呢?

既然不是乙個類去實現,那就是有很多地方有用到,大家需要統一標準。甚至有的程式語言(object-c)已經不把介面叫 inte***ce,直接叫 protocol。

統一標準的目的,是大家都知道這個是

做什麼的,但是具體不用知道具體

怎麼做

比如說:

我知道 comparable 這個介面是用來比較兩個物件的,那麼如何去比較呢?

數字有數字的比較方法,字串有字串的比較方法,學生(自己定義的類)也有自己的比較方法。

然後,在另外乙個負責物件排序(不一定是數字喔)的**裡面,肯定需要將兩個物件比較。

這兩個物件是什麼型別呢?

object a,b?肯定不行,a > b 這樣的語法無法通過編譯。

int a,b?也不行?一開始就說了,不一定是數字。

....

所以,comparable 就來了。他告訴編譯器,a b 兩個物件都滿足 comparable 介面,也就是他們是可以進行比較的。具體怎麼比較,這段程式不需要知道。

所以,他需要一些具體的實現,comparable 介面有乙個方法,叫 compareto。那麼這個方法就是用來取代 這樣的運算子。

因為運算子是編譯器保留給內建型別(整數、浮點數)進行比較用的,而不是乙個廣義的比較運算。

如果你可以明白 jdk 自身庫裡面諸如 comparable 這樣已經有的介面,那麼就很容易理解自己在開發程式的時候為什麼需要用到介面了。

陳志明

一層一層抽象上去然後進行更方便地管理。

什麼是DNS,作用是什麼?

dns的作用 1.根據網域名稱,進行dns網域名稱解析 2.拿到解析的ip位址,建立tcp連線 3.向ip位址,傳送http請求 4.伺服器處理請求 5.返回響應結果 6.關閉tcp連線 7.瀏覽器解析html 8.瀏覽器布局渲染 dns解析流程 1 瀏覽器快取 當使用者通過瀏覽器訪問某網域名稱時,...

IFNULL的作用是什麼?

下面乙個簡單的sql和結果說明,如果ifnull a,b a接收的值為null,則返回b,否則返回a select ifnull null,0 select ifnull score,0 from student where id 4 按照ifnull函式的作用,應該返回0才對,可是結果並不是這樣。...

babel的作用是什麼?

babel是將es6及以上版本的 轉換為es5的工具。它用 babel.config.js 或 babelrc 檔案作為配置檔案,其中最為重要的配置引數是presets和plugins。plugins babel外掛程式可以將輸入原始碼進行轉換,輸出編譯後的 presets 一組babel外掛程式,...