在JAVA剛學的時候,肯定會對一些OOP的關鍵字感到疑惑,例如: class 是什麼? abstract & interface 到底差在哪裡? Override 和 Overwrite 差在哪裡阿? 正常 ! 正常 ! 我也學了很久看了很多大神的文章後才有一知半解,底下我來介紹關於interface 的好文章。
這篇跟原文章高度相似,支持可以去原文章按讚
其實interface我也不知道台灣翻譯成什麼,我比較喜歡大陸那邊的翻譯"接口",按字面上的意思就是,可以拿來"插"的東西,但說到"插"還是有點學問。
其實接口就是一種規範,當你拿出Lightning時就代表會有一個蘋果產品與他對應 ; 當拿出TYPE-C 時就代表我要幫安卓機充電了!
舉個例子,我要開個寵物糧食店,寵物糧食店是接口,代表所有寵物都能來我這裡買食物:
public interface PetRestaurant{
public void buyFood();
}
有誰能來買,當然是寵物阿,因此要求想來我這裡買糧食的寵物必須實現我這個接口。
//寵物狗想要買狗糧
public class PetDog implements PetRestaurant{
@Override //實現接口方法
public void buyFood(){
System.out.println("我是狗,我要買狗糧,汪汪!!");
}
}//寵物貓想要買貓糧
public class PetCat implements PetRestaurant{
@Override
public void buyFood(){
System.out.println("我是貓,我要買貓糧,喵喵!!");
}
}
貓和狗有各自的糧食需求,先在我們來實踐寵物店店員,但店員又怎麼會知道下一個進來的是狗還是貓呢? 但店員會知道,進來店裡的必定都是實踐過PetRestaurant 接口的寵物,因此把PetRestaurant擺上來成為購買規範:
public class Clerk{ //店員
public sellFood(PetRestaurant pet){ //店員賣食物給實踐過的寵物
pet.buyFood(); //寵物買糧食
}
}
因此現在就能開始來賣食物咯!!
public Test{
public static void main(String[] args){ //開始賣
Clerk C = new Clerk(); //實例店員
PetDog dog = new PetDog(); //實例狗
PetCat cat = new PetCat(); //實例貓 C.sellFood(dog); //我是狗,我要買狗糧,汪汪!!
C.sellFood(cat); //我是貓,我要買貓糧,喵喵!!
}
}
當把寵物交給店員時,店員會明白傳進來是什麼物種,進而給他正確的食物
public class Clerk{ //傳進來 PetDog 物件 dog
public sellFood(PetRestaurant pet){
//傳進來是Dog 因此 PetRestaurant pet = dog
pet.buyFood(); //答應dog的方法
}
}
注意到的是整個過程中,店員並不知道進來的會是誰,只知道會是一個實踐PetRestaurant的寵物。假如有一天,寵物豬也想來買糧食,那一樣實踐PetRestaurant時也能在店員這裡消費,這大概就是interface與Override想要達成的目的了。
public class PetPig{
@Override
public void buyFood(){
System.out.println("我是豬,我吃屎!!");
}
}PetPig pig = new PetPig();C.sellFood(pig); //我是豬,我吃屎!!