接口和抽象類的聯系和區別。
一,簡單總結
1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向實現所有抽象方法的子類對象,接口變量必須指向實現所有接口方法的類對象。
2、抽象類要被子類繼承,接口要被類實現。
3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現
4、接口里定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。
5、抽象類里的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那么該子類只能是抽象類。同樣,一個實現接口的時候,如不能全部實現 接 口方法,那么該類也只能為抽象類。
6、抽象方法只能申明,不能實現,接口是設計的結果 ,抽象類是重構的結果
7、抽象類里可以沒有抽象方法
8、如果一個類里有抽象方法,那么這個類只能是抽象類
9、抽象方法要被實現,所以不能是靜態的,也不能是私有的。
10、接口可繼承接口,並可多繼承接口,但類只能單根繼承。
二,標准作答
相同點
- 抽象類和接口均包含抽象方法,類必須實現所有的抽象方法,否則是抽象類
- 抽象類和接口都不能實例化,他們位於繼承樹的頂端,被其他類繼承和實現
兩者的區別主要體現在兩方面:語法方面和設計理念方面
語法方面的區別是比較低層次的,非本質的,主要表現在:
- 接口中只能定義全局靜態常量,不能定義變量。抽象類中可以定義常量和變量。
- 接口中所有的方法都是全局抽象方法。抽象類中可以有0個、1個或多個,甚至全部都是抽象方法。
- 抽象類中可以有構造方法,但不能用來實例化,而在子類實例化時執行,完成屬於抽象類的初始化操作。接口中不能定義構造方法。
- 一個類只能有一個直接父類(可以是抽象類),但可以充實實現多個接口。一個類使用extends來繼承抽象類,使用implements來實現接口。
二者的主要區別在設計理念上,決定了某些情況下使用抽象類還是接口。
- 抽象類體現了一種繼承關系,目的是復用代碼,抽象類定義了各個子類的相同代碼,可認為父類是一個實現了部分功能的“中間產品”,而子類是“最終產品”。父類和子類間須存在“is-a”關系,即父類和子類在概念本質上是相同的。
接口並不要求實現類和接口在概念本質上一致,僅僅是實現了接口定義的約定或能力而已。接口定義了“做什么”,實現類負責完成“怎么做”,體現了功能(規范)和實現分離的原則。接口和實現之間可以認為是一種“has-a的關系
java常用類
鏈接:https://pan.baidu.com/s/14DPwWZpvwwYXWAMwz3xmnQ 提取碼:lbkx