如何理解java的抽象類和接口的區別?
首先,來理解一下抽象類和接口的概念。
眾所周知,Java是面向對象的程序語言,而面向對象中的所有的對象,大都是通過類來描述的。相反,并不是所有的類都適合來描述對象,比如抽象類。抽象類中沒有足夠的信息來描述一個具體的對象,所以它是抽象的。
而接口,是高度抽象類型,是抽象方法的集合,接口并不是類,而是對類的一組需求的描述。這些類要遵循接口描述的統一格式來定義。如果類遵從了某個特定接口,就代表它履行了這項服務。
然后,來理解一下抽象類和接口的相同點。
其一,都不能被實例化。
其二,接口只有在其實現類實現了其中所有的方法、抽象類的子類也都實現了所有的抽象方法后,才可以被實例化。
再然后,來理解一下抽象類和接口的不同點。
抽象類:
abstract關鍵字修飾抽象方法只有聲明,無方法體只能繼承不能實例化包含抽象方法的類一定是抽象類,但抽象類不一定包含抽象方法抽象類中的抽象方法的修飾符只能是public或者protected,默認為public一個類只能繼承一個抽象類子類繼承抽象類時,必須實現全部的抽象方法,否則也必須為抽象類可以包含成員變量、成員方法、構造方法;但是構造方法不能用于實例化,只是供子類調用如抽象類Animal,有成員屬性name、構造方法:
接口:
interface關鍵字修飾方法只能有聲明,不能有方法體,默認為public abstract。JDK1.8之后,可以有default類型的方法,可以有方法體只能實現不能實例化所有方法只能是public abstract。JDK1.8之后,可以有default類型的方法,可以有方法體一個類可以實現多個接口可以包含變量,但隱式默認為public static finalJDK1.8中的新特性,新增了默認方法(default):允許接口含有非抽象的方法,但必須用default修飾;default方法可以子類調用,子類也可不比對其實現;如子類實現了多個接口,且這些接口均包含有默認方法,則子類必須重寫該默認方法。新增了靜態方法:允許接口使用static關鍵字修飾方法并提供實現,即為靜態方法;接口的靜態方法只能通過接口進行調用,調用方式為:接口名:方法名。如接口Climb,通用行為climb:
舉個栗子,Cat類繼承Animal、且實現Climb,具有動物特性和攀爬行為:
運行一下,看一下調用順序和結果。
果然,先調用了抽象父類的構造方法,然后是子類的構造方法。
最后,來總結一下抽象類和接口。
接口的設計目的為:對類的行為進行約束,是一種通用的行為規范;
抽象類的設計目的為:類的通用模板,提高代碼復用性。
上一篇安卓開發是不是比較難的
下一篇緊急厘米與像素的換算緊急