介面是用來給物件(類別「實作」(implement)用的
就像是個抽象類別(abstract object)
抽象類別用來定義「東西」給物件(類別)繼承,繼承一類別的物件,就表示會其父類別所有特性及方法 (「東西」才有特性、會做的事)
介面用於定義「行為」來給物件(類別)去實作,實作了一個介面,意義上就是這個物件會做此介面中所有定義的行為,但怎麼做這些行為還可以再個別定義,不綁死 (行為就是行為而已,沒有特性)
打個比方
先定義一介面 會飛的東西
interface flyer{
fly(){....}
}
再來我要定義一個蟲子類別 public class insect{
特性: 腳數、顏色、壽命、棲息地.....
方法: 吃() 、移動() 、下蛋()....
}
但蟲子有分會飛跟不會飛的
蟲子 > 會飛的蟲 繼承 insect 再實作 flyer
↓
> 不會飛的蟲(爬蟲 只繼承insect
有實作flyer介面的物件邏輯上就是要會飛的東西
但是並不是每種東西的飛行方法都一樣
飛機的 fly() 可能要耗油、啟動引擎、渦輪....
昆蟲的 fly() 可能要耗體力、振翅....
所以flyer介面裡只宣告有fly()這個方法,而實際fly()方法中要做哪些事留待實作這個介面的物件去各自去定義
當然,如果硬要在蟲子類別中弄個abstract void fly() 也是可以
但會飛的東西很多,並不是只有蟲子才會飛
所以把「飛行」這個行為獨立出來弄成一個介面,讓只要會飛行的物件去實作他就行了
沒有留言:
張貼留言