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