1. 程式人生 > >JAVA-初步認識-第九章-接口和抽象類的區別

JAVA-初步認識-第九章-接口和抽象類的區別

nbsp 技術分享 領域分析 ava 認識 com 子類 功能 接口

一. 接口和抽象類之間的區別

抽象類定義兩個方法,接口中也可以定義兩個方法,那麽在定義的時候,到底是定義抽象類還是接口呢?

技術分享

繼承和實現是兩回事。

抽煙不是學員的基本功能,是學員的擴展功能。學員要抽煙,就實現接口。

類在確定體系,接口在確定體系中的額外功能。

舉例來說明,

技術分享

按照之前講述的知識,程序就可以這麽寫,但是呢,我們對其做了一個改進

技術分享

將導盲的功能抽取出來,和不抽取,兩者有什麽區別呢?貌似不單獨抽取好像更簡便一些。但是引發的思考就是,不是說只有導盲犬有導盲的功能,其他的動物也有這個功能。

我繼承了犬,就繼承了犬的基本功能,繼承了導盲,就具備了導盲功能,但是不能多繼承。雖然繼承不成,但是接口可以。

這樣一來,兩者就分工明確了。犬這個抽象類在定義的時候,定義了犬這個動物的最基本的功能。用類來定義基本功能,在問題領域分析的時候,導盲應該是額外功能。最終的形式就如下面所示。

技術分享

如果非要將導盲接口取消,將導盲功能寫入導盲犬,那麽程序就沒有擴展性。再換個角度來說明,如果所有的導盲動能都設置在子類中,導盲犬,導盲貓,導盲豬。要想三者全部出現,要下三個命令,導盲犬上,導盲貓上,導盲豬上。這就帶來了問題,有共性的內容,沒有提高復用性。二,可以這麽說,凡是具備導盲,全部都給我去,這樣就很簡答了。導盲怎麽來的,是這些物種不斷抽取出來的,這就顯示出將導盲功能抽取出來的好處了。

下面再說一說,問題領域中的一些分析。

JAVA-初步認識-第九章-接口和抽象類的區別