接口的作用對於很多新手來說很不容易理解,我給大家舉個例子。接口只是一個規范,所以里面的方法都是空的。假如我開了一個寵物糧店,聲明所有寵物都可以來我這里買糧食,這就相當於一個接口,
public interface PetRestaurant
{
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("我是貓,我要買貓糧");
}
}
當狗和貓來我的店之前,我是不知道他們到底是什么,但是當他們來到我的店,我就知道一個要貓糧食,一個要狗糧食。因為他們都實現我這個接口,他們都有一個buy()函數,都可以進行買這個行為。下面這個類相當於一個接待顧客的類,即店小二,他接待所有實現了我這個寵物店接口的動物,傳進來一個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(); //實例化一個貓,相當於把貓顧客實例化
test t = new test(); //實例化一個店小二
t.buy(cat); //把貓交給店小二
t.buy(dog); //把狗交給店小二
}
這樣運行的結果就是
我是貓,我要買貓糧
我是狗,我要買狗糧
你知道嗎,整個過程我這個店主其實根本不知道來的到底是貓是狗還是其他什么,我只要有一個店小二,把這些來的不知什么動物都全部交給店小二,店小二就知道怎么去賣了,因為這些狗啊貓啊都實現了我這個寵物店的接口,而店小二就負責接待所有實現了我這個接口的動物(接受符合這個接口類型的參數)。這就有一個好處——假如明天來了一頭小豬,只要它實現了我這個接口,我只管交給店小二處理就OK了,我這個店小二根本不需要變化,我這個店主也只需要實例化一下這個動物就OK你想,假如沒有接口,會怎么辦,來一個貓,我要去創造一個貓,還要實例化,來一只狗,我要創建一只狗,同樣要實例化,還要配備專門的店小二去接待,就會相當麻煩。
作者:梅雲羅
鏈接:https://www.zhihu.com/question/20111251/answer/14760353
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。