接口定義的是方法的一些規(guī)范,而抽象類定義的是類的模板。
接口中只能聲明方法,但是不能定義具體的方法
抽象類中可以聲明抽象方法,但是同時(shí)也可以具體去實(shí)現(xiàn)一些方法,但是抽象類不能被實(shí)例化
所以如果你想對(duì)類的方法定義一些規(guī)范的同時(shí),也想賦予這個(gè)類一些具體實(shí)現(xiàn)方法,那么就用抽象。
如果你只想定義一個(gè)類的規(guī)范,那就用接口
- 抽象:定義類的規(guī)范,賦予具體實(shí)現(xiàn)方法
- 接口:定義類的規(guī)范
相同
- 抽象類和接口都有抽象方法
- 抽象類和接口都不能實(shí)例化
- 抽象類和接口的使用意義(即作用)相同
區(qū)別
- 抽象類的子類遵循繼承原則,只能有一個(gè)父類;但一個(gè)類可以實(shí)現(xiàn)多個(gè)接口
- 抽象類中可以有非抽象的已經(jīng)實(shí)現(xiàn)的方法;接口中全是抽象的方法,都是方法定義
- 抽象類中方法和變量的訪問(wèn)控制自己定義;接口中只能是公共的
抽象類可以作為基類,為子類提供公共方法,并定制公共的抽象讓子類來(lái)實(shí)現(xiàn)。
而接口則是更高層次的抽象,它可以讓我們依賴于抽象而不是具體的實(shí)現(xiàn),為軟件開發(fā)帶來(lái)更多的擴(kuò)展性。
接口
- 對(duì)接口的使用是通過(guò)關(guān)鍵字?implements
- 接口只能定義常量
- 子類必須實(shí)現(xiàn)接口定義的所有方法
- 接口只能定義不能實(shí)現(xiàn)該方法
- 接口沒(méi)有構(gòu)造函數(shù)
- 接口中的方法和實(shí)現(xiàn)它的類默認(rèn)都是public類型的
- 接口是一種特殊的抽象類
抽象類
- 對(duì)抽象類的使用是通過(guò)關(guān)鍵字extends
- 不能被實(shí)例化,可定義子類必須實(shí)現(xiàn)的方法
- 子類必須定義父類中的所有抽象方法,這些方法的訪問(wèn)控制必須和父類一樣
- 如果一個(gè)類中有一個(gè)抽象方法,則該類必須定義為抽象類
- 抽象類可以有構(gòu)造函數(shù),但是不能被實(shí)例化
- 抽象類中那個(gè)的方法可以使用private,protected,pubic來(lái)修飾
- 一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口,但一個(gè)類只能繼承一個(gè)抽象類
抽象類的作用:就是嚴(yán)格要求子類的結(jié)構(gòu),所以抽象類其實(shí)就是一個(gè)規(guī)范。
總結(jié)
掌握好接口的設(shè)計(jì)原則,往往就能看懂一大半的框架的設(shè)計(jì)思想。這也是我們面向?qū)ο笾凶钭罨A(chǔ)的特性。
抽象類作為公共基類來(lái)說(shuō)可以為多態(tài)提供比較好的范本,它能夠讓你的子類有自己的個(gè)性又能使用父類的能力。
總之,深入場(chǎng)景業(yè)務(wù),選擇合適的方式實(shí)現(xiàn)代碼,靠的是能力、經(jīng)驗(yàn)與智慧的綜合,決不是一句誰(shuí)好誰(shuí)不好所能定性的。