抽象類Abstract Class和接口Interface區(qū)別
抽象類是為了隱藏內(nèi)部實(shí)現(xiàn),只向外部展示當(dāng)前類具備的功能。
Abstract Class與Interface的區(qū)別
- 默認(rèn)實(shí)現(xiàn): 接口不可用有實(shí)現(xiàn),必須是絕對(duì)的抽象方法殿衰。抽象類可以有實(shí)例來實(shí)現(xiàn)默認(rèn)行為。
- 方法類型: 接口只能有抽象方法盛泡。抽象類可以有抽象方法和非抽象方法闷祥。從Java 8開始,抽象類可以增加默認(rèn)實(shí)現(xiàn)和靜態(tài)方法。
-
Final 變量: 接口內(nèi)的變量默認(rèn)會(huì)聲明為
final
類型。抽象類可以持有非final變量蟆肆。 -
變量類型: 抽象類可以持有
final
,非final
悟衩,靜態(tài)和非靜態(tài)變量。接口只能持有靜態(tài)和final
變量栓拜。 - 實(shí)現(xiàn): 抽象類可以提供接口的實(shí)現(xiàn)座泳,接口不能提供抽象類的實(shí)現(xiàn)惠昔。
-
繼承和抽象區(qū)別: 接口通過
implements
關(guān)鍵字實(shí)現(xiàn),抽象類通過extends
關(guān)鍵字實(shí)現(xiàn)挑势。 - 多重實(shí)現(xiàn): 接口可以繼承一個(gè)或多個(gè)接口镇防。抽象類只能繼承一個(gè)Java類,可以實(shí)現(xiàn)多個(gè)Java接口薛耻。
-
數(shù)據(jù)成員的可訪問性: 接口的成員默認(rèn)是
public
的营罢。抽象類的成員可以是private
、protected
等饼齿。
使用場(chǎng)景
何時(shí)用抽象類,何時(shí)用接口
接口可以對(duì)不用的類適用蝙搔,實(shí)現(xiàn)類之間不需要有什么共同點(diǎn)缕溉。
知識(shí)點(diǎn)補(bǔ)充
多繼承
Java是否支持多繼承,在多繼承時(shí)的特點(diǎn)與場(chǎng)景吃型,優(yōu)劣勢(shì)
實(shí)現(xiàn)多接口
Java是否支持實(shí)現(xiàn)多接口证鸥,在多繼承時(shí)的特點(diǎn)與場(chǎng)景,優(yōu)劣勢(shì)