JAVA 抽象類 接口(內涵,理解)

簡單來說:

接口是公開的,裏面不能有私有的方法或變量,是用於讓別人使用的,而抽象類是可以有私有方法或私有變量的,

另外,實現接口的一定要實現接口裏定義的所有方法,而實現抽象類可以有選擇地重寫需要用到的方法,一般的應用裏,最頂級的是接口,然後是抽象類實現接口,最後纔到具體類實現。

還有,接口可以實現多重繼承,而一個類只能繼承一個超類,但可以通過繼承多個接口實現多重繼承,接口還有標識(裏面沒有任何方法,如Remote接口)和數據共享(裏面的變量全是常量)的作用.

理解:

抽象類:
抽象方法是必須實現的方法。就象動物都要呼吸。但是魚用鰓呼吸,豬用肺呼吸。
動物類要有呼吸方法。怎麼呼吸就是子類的事了。

現在有很多討論和建議提倡用interface代替abstract類,兩者從理論上可以做一般性的混用,但是在實際應用中,他們還是有一定區別的。抽象類一般作爲公共的父類爲子類的擴展提供基礎,這裏的擴展包括了屬性上和行爲上的。而接口一般來說不考慮屬性,只考慮方法,使得子類可以自由的填補或者擴展接口所定義的方法,就像JAVA王子所說的事件中的適配器就是一個很好的應用。

內涵:

用一個簡單的例子,比如說一個教師,我們把它作爲一個抽象類,有自己的屬性,比如說年齡,教育程度,教師編號等等,而教師也是分很多種類的,我們就可以繼承教師類而擴展特有的種類屬性,而普遍屬性已經直接繼承了下來。
而接口呢~還是拿教師做例子,教師的行爲很多,除了和普通人相同的以外,還有職業相關的行爲,比如改考卷,講課等等,我們把這些行爲定義成無body的方法,作爲一個集合,它是一個interface。而教師張三李四的各自行爲特點又有不同,那麼他們就可以擴展自己的行爲body。從這點意義上來說,
interface偏重於行爲。 總之,在許多情況下,接口確實可以代替抽象類,如果你不需要刻意表達屬性上的繼承的話

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章