2014年6月30日 星期一

介面 Interface

介面是用來給物件(類別「實作」(implement)用的

就像是個抽象類別(abstract object)

抽象類別用來定義「東西」給物件(類別)繼承,繼承一類別的物件,就表示會其父類別所有特性及方法 (「東西」才有特性、會做的事)



介面用於定義「行為」來給物件(類別)去實作,實作了一個介面,意義上就是這個物件會做此介面中所有定義的行為,但怎麼做這些行為還可以再個別定義,不綁死 (行為就是行為而已,沒有特性)


打個比方

先定義一介面 會飛的東西
                        interface flyer{
                                fly(){....}
                        }

再來我要定義一個蟲子類別    public class insect{
特性: 腳數、顏色、壽命、棲息地.....
方法: 吃() 、移動() 、下蛋()....
}

但蟲子有分會飛跟不會飛的

蟲子  > 會飛的蟲                 繼承 insect 再實作 flyer
         ↓
          > 不會飛的蟲(爬蟲    只繼承insect

有實作flyer介面的物件邏輯上就是要會飛的東西

但是並不是每種東西的飛行方法都一樣

飛機的 fly() 可能要耗油、啟動引擎、渦輪....

昆蟲的 fly() 可能要耗體力、振翅....

所以flyer介面裡只宣告有fly()這個方法,而實際fly()方法中要做哪些事留待實作這個介面的物件去各自去定義

當然,如果硬要在蟲子類別中弄個abstract void fly() 也是可以

但會飛的東西很多,並不是只有蟲子才會飛

所以把「飛行」這個行為獨立出來弄成一個介面,讓只要會飛行的物件去實作他就行了



沒有留言:

張貼留言