來喝杯JAVA吧(一) : 關於interface好文章

LUFOR129
4 min readOct 1, 2018

在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); //我是豬,我吃屎!!

--

--