_________________________________________________________________________________
假設你去公司面試,一般都會對學歷有要求,比如大學本科、碩士研究生等。
招聘接口:“對學歷有要求”,好比是接口,這是一個寬泛的標準!這就好比是程序的接口。
因爲公司招聘是有規章制度的,因此需要有這麼一個進人的規範。
對“學歷要求”具體不同的內容,這就是接口的實現。
比如HR要求人力資源或行政相關專業,
Java開發工程師可能要求計算機相關專業。
高級行政管理人員可能要求MBA學歷等等。
簡單來說,就是不同部門、不同崗位對學歷的定義(或者說具體實現)是不同的。
這樣一來會有以下幾個問題產生:
1、如果人力部門招這個專業很可能和自己部門的業務不對口,
此時如果因此而修改學歷要求可能暫時可以滿足人力的要求,但是業務部門卻又該出麻煩了。
2、同一部門的不同職位對於專業學歷高低要求不同。
比如部門經理要求是研究生、普通員工要求是本科生,如果你直接寫死,
那麼水平高的人招不進來對公司不就是損失嗎?
定好規範,任你實現,效率可高、可低,實現內容也可隨時間變化而變化,但是調用關係是不變的
(也就是說公司在選拔人才時,無論如何學歷還是必須的一環,這一點是不會變的)
_________________________________________________________________________________
接口只是一個規範,所以裏面的方法都是空的。
假如我開了一個寵物糧店,聲明所有寵物都可以來我這裏買糧食,這就相當於一個接口,
public void buy();
}
public class DogPet implements PetRestaurant {
@Override
public void buy() {
System.out.println("我是狗,我要買狗糧");
}
}
當一隻貓看到了,知道自己也是寵物,所以也去實現這個接口
public class CatPet implements PetRestaurant {
@Override
public void buy() {
System.out.println("我是貓,我要買貓糧");
}
當狗和貓來我的店之前,我是不知道他們到底是什麼,但是當他們來到我的店,我就知道一個要貓糧食,一個要狗糧食。因爲他們都實現了 我這個接口,都可以買。下面這個類相當於一個接待顧客的類,即店小二,他接待所有實現了我這個寵物店接口的動物,傳進來一個PetRestaurant 類型的寵物,注意,這個PetRestaurant 是接口
public class test {
public void buy(PetRestaurant pet)
{
pet.buy();
}
}
public class Tests {
public static void main(String[] args) {
PetRestaurant dog = new DogPet(); //實例化一個狗,相當於把狗顧客實例化
PetRestaurant cat = new CatPet();//實例化一個貓,相當於把貓顧客實例化
t.buy(cat); //把貓交給店小二
t.buy(dog); //把狗交給店小二
}
這樣運行的結果就是
我是貓,我要買貓糧
我是狗,我要買狗娘
你想,假如沒有接口,會怎麼辦,來一個貓,我要去創造一個貓,還要實例化,來一隻狗,我要創建一隻狗,同樣要實例化,還要配備專門的店小二去接待,就會相當麻煩
_________________________________________________________________________________
_________________________________________________________________________________
大家說的都很對,我再補充一點。
接口在開發過程中可以快速分離工作內容。
比如調用者在寫業務邏輯的時候需要一個功能,可能是數據庫訪問,或者複雜計算,但是他的工作專注於實現業務邏輯,不想分開精力去做底層實現,那麼他只需要先實現一個接口,定義了規範,然後就可以繼續他的業務邏輯代碼了。
而實現者可以根據這個接口規範,做具體的實現。
這樣通過使用接口就可以快速的分離工作內容,達到團隊並行工作的目的。