包含一個抽象方法的類就是抽象類java
聲明而未被實現的方法,抽象方法必須使用abstract關鍵詞字聲明跨域
1安全 2ide 3函數 4spa 5設計 6code |
|
三、抽象類被子類繼承,子類(若是不是抽象類)必須重寫抽象類中的全部抽象方法
四、抽象類不能被直接實例化,要經過其子類進行實例化
五、只要包含一個抽象方法的抽象類,該方法必需要定義成抽象類,不論是否還包含有其餘方法。
六、子類中的抽象方法不能與父類的抽象方法同名。
七、abstract不能與final並列修飾同一個類。
八、abstract 不能與private、static、final或native並列修飾同一個方法。
爲何須要用到抽象類?
在下面這個例子中,把打印機類封裝成抽象類,把print定義成抽象類,當HPPrinter和CannonPrinter要繼承printer類的時候,必須重寫print函數。這樣寫的好處是,每一個打印機都有本身打印方式,此舉能夠防止子類沒有寫明打印方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
一、接口是java中最重要的概念,接口能夠理解爲一種特殊的類,裏面所有是由全局常量和公共的抽象方法組成
接口中全部方法都是抽象方法;
接口當中全部的方法都是public類型
二、接口的格式
1 2 3 4 |
|
三、接口的實現也必須經過子類,使用關鍵字implements,並且接口是能夠多實現的
1 2 3 |
|
四、一個類能夠同時繼承抽象類和接口
1 2 3 |
|
五、一個接口不能繼承抽象類,但能夠經過extends關鍵字繼承多個接口,實現接口的多繼承
1 2 3 |
|
本節參考自(http://www.cnblogs.com/chenssy/ 做者:chenssy)
1 2 3 4 5 6 7 8 9 |
|
抽象類方式中,抽象類能夠擁有任意範圍的成員數據,同時也能夠擁有本身的非抽象方法,
可是接口方式中,它僅可以有靜態、不能修改的成員數據(可是咱們通常是不會在接口中使用成員數據),同時它全部的方法都必須是抽象的。
在某種程度上來講,接口是抽象類的特殊化。
對子類而言,它只能繼承一個抽象類(這是java爲了數據安全而考慮的),可是卻能夠實現多個接口。
一、 抽象層次不一樣
抽象類是對類抽象,而接口是對行爲的抽象。抽象類是對整個類總體進行抽象,包括屬性、行爲,可是接口倒是對類局部(行爲)進行抽象。
二、 跨域不一樣
抽象類所跨域的是具備類似特色的類,而接口卻能夠跨域不一樣的類。咱們知道抽象類是從子類中發現公共部分,而後泛化成抽象類,子類繼承該父類便可,可是接口不一樣。實現它的子類能夠不存在任何關係,共同之處。例如貓、狗能夠抽象成一個動物類抽象類,具有叫的方法。鳥、飛機能夠實現飛Fly接口,具有飛的行爲,這裏咱們總不能將鳥、飛機共用一個父類吧!因此說抽象類所體現的是一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is-a" 關係,即父類和派生類在概念本質上應該是相同的。對於接口則否則,並不要求接口的實現者和接口定義在概念本質上是一致的, 僅僅是實現了接口定義的契約而已。
三、 設計層次不一樣
對於抽象類而言,它是自下而上來設計的,咱們要先知道子類才能抽象出父類,而接口則不一樣,它根本就不須要知道子類的存在,只須要定義一個規則便可,至於什麼子類、何時怎麼實現它一律不知。好比咱們只有一個貓類在這裏,若是你這是就抽象成一個動物類,是否是設計有點兒過分?咱們起碼要有兩個動物類,貓、狗在這裏,咱們在抽象他們的共同點造成動物抽象類吧!因此說抽象類每每都是經過重構而來的!可是接口就不一樣,好比說飛,咱們根本就不知道會有什麼東西來實現這個飛接口,怎麼實現也不得而知,咱們要作的就是事前定義好飛的行爲接口。因此說抽象類是自底向上抽象而來的,接口是自頂向下設計出來的。