在面向對象語言Java中,所有的對象都是通過類來描述,但是類都是用來描述對象的嗎?
我們會想到什麼呢?Yeah,它就是抽象類!如果一個類并沒有足夠的資訊去描述一個具體的對象,那麼,就應該把類定義為抽象類。比如,當我們需要用一個類來定義一組具有共同屬性和行為,但是又不需要給出行為的具體實作,這時,我們可以将此類定義為抽象類。抽象類往往用來表示我們在對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。這時,我們就可以得出一個簡單的結論:抽象類的作用就是用來定義一些共同的屬性或行為但又不需要不用給出具體的實作。這時,你會聯想到什麼?
接口!接口的作用就是用來定義一些實作類必須實作的行為。其實,一個接口就是一個隻存在抽象方法或靜态常量的抽象類。在關系方面來說,類的繼承是強是關系(意思就是,你必須是以我為父類所衍生的子類),例如:人,必須是動物的一種。而接口的實作則是弱是關系(意思是,你是我的一部分,不是我的子類,就像眼睛是動物的一部分)。
我比較喜歡使用接口,而不喜歡使用繼承。天知道,這個類什麼時候還要繼承另外一個類!Java隻允許單繼承,也就是一個類隻能有一個父類,而不能有很多父類,就像在現實生活中,你隻可能也必須隻有一個親生父親,而你的父類可以有很多個孩子。而接口就不存在這種限制,就好像你要我去一個地方,你管我是走路、擠公交、打的或者是飛機等等,我隻要去到那裡就成。當然,我可以走路走一段,擠公交擠一段,另外一段可能搭飛機去了。相對于類的繼承來說,接口具有很大的靈活性,因為一個類可以實作多個接口。靈活,意味着難控制,也意味着可移植性強。工廠模式也不過如此吧。
做事,都有要留有餘地,做人,就更要有餘地。其實,接口也展現了這個道理。