對於Java初學者來說,可能會有這樣一個疑惑----我們定義了一個介面,但是我們在實現這個介面的類中,還要實現介面中的所有方法,那還不如直接就在這個類中寫實現方法,豈不更便捷,還省去定義介面麻煩。那麼介面在Java中的作用到底是什麼呢。
1、定義
介面是由一組相關的空方法構成的。
2、作用
介面是個規範。因為它可能要被多個類去實現,程式怎麼知道他們是有關聯的呢。既然不是一個類去實現,那麼是有很多地方有用到,大家需要統一標準。甚至有的程式設計語言(Object-)已經不把介面叫interface,直接叫protocol。
統一標準的目的,是大家都知道這個是做什麼的,但不需要知道具體怎麼做。比如,Comparable找個介面是用來比較兩個對象的,那麼如何比較呢。
數字有數位比較方法,字串有字串的比較方法,學生(自己定義的類)也有自己的比較方法。
軟體開發中一個很重要的一個理念就是“解耦”,介面和介面實現就是在幹這件事,定好規範,任你實現,效率可高,可低,實現內容也可隨時間變化而變化,但是調用關係是不變的。
3、優點:
(1)程式是可拓展的。你在修改你具體的實作類別的時候,不需要去修改調用它的類;這個呢,是java編程時候強調的“對拓展開放,對修改關閉”原則。當然這也是java多態性的體現。
(2)就是java通過Interface實現多繼承。繼承的一個好處就是代碼的複用,減少代碼錯誤。
4、生活執行個體
(1)假如我開了一個寵物糧店,聲明所有寵物都可以來我這裡買糧食,這就相當於一個介面。
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("我是貓,我要買貓糧");
}
} 當狗和貓來我的店之前,我是不知道他們到底是什麼,但是當他們來到我的店,我就知道一個要貓糧,一個要狗糧。因為他們都實現了我這個介面,都可以買。
下面這個類相當於一個接待顧客的類,即店小二,他接待所有實現了我這個寵物店介面的動物,傳進來一個PetRestaurant類型的寵物,注意,這個PetRestaurant是介面
public class test{
public void buy(PetRestautrant pet){
pet.buy();
}
}
好了,這個時候我這個老闆出現了,我可以給他們賣糧食了,相當於測試類別
public class Tests{
public static void main(String[] args){
test t=new test();
PetRestaurant dog=new DogPet();
PetRestaurant cat=new CatPet();
t.buy(dog);
t.buy(cat);
}
}