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