- N +

抽象類和接口的區別和聯系,接口和抽象類的相同點和不同點

抽象類和接口有什么區別

區別如下:

1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向實現所有抽象方法的子類對象,接口變量必須指向實現所有接口方法的類對象。

2、抽象類要被子類繼承,接口要被類實現。

3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現。

4、接口里定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。

5、抽象類里的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那么該子類只能是抽象類。同樣,一個實現接口的時候,如不能全部實現接口方法,那么該類也只能為抽象類。

6、抽象方法只能申明,不能實現,接口是設計的結果,抽象類是重構的結果。

7、抽象類里可以沒有抽象方法。

8、如果一個類里有抽象方法,那么這個類只能是抽象類。

9、抽象方法要被實現,所以不能是靜態的,也不能是私有的。

10、接口可繼承接口,并可多繼承接口,但類只能單根繼承。

類,抽象類和接口有什么區別

“抽象類”和“接口”的區別如下:

1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向實現所有抽象方法的子類對象,接口變量必須指向實現所有接口方法的類對象。

2、抽象類要被子類繼承,接口要被類實現。

3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現4、接口里定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。5、抽象類里的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那么該子類只能是抽象類。同樣,一個實現接口的時候,如不能全部實現接口方法,那么該類也只能為抽象類。6、抽象方法只能申明,不能實現,接口是設計的結果,抽象類是重構的結果7、抽象類里可以沒有抽象方法8、如果一個類里有抽象方法,那么這個類只能是抽象類9、抽象方法要被實現,所以不能是靜態的,也不能是私有的。10、接口可繼承接口,并可多繼承接口,但類只能單根繼承。如果你想實現多重繼承,那么你必須使用接口。由于Java不支持多繼承,子類不能夠繼承多個類,但可以實現多個接口。因此你就可以使用接口來解決它。如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實現了該接口的類。擴展資料:抽象類:接口:接口是抽象方法的集合。如果一個類實現了某個接口,那么它就繼承了這個接口的抽象方法。這就像契約模式,如果實現了這個接口,那么就必須確保使用這些方法。接口只是一種形式,接口自身不能做任何事情。

類和接口有什么關系

設計思想不同,使用動機不同.

抽象類和接口設計的時候,設計思想不同.設計抽象類是自下而上的過程,因為調用者子類需要某些屬性和特有行為,所以調用者繼承抽象類設計接口是自上而下的過程,接口規范某一行為,我某類需要這個行為,調用者實現某接口

開發者使用的時候,使用動機不同.開發者繼承抽象類是為了使用抽象類的屬性和行為;開發者實現接口只是為了使用接口的行為.

區別總結:

區別一:抽象類只能單繼承,接口能多實現

區別二:抽象類是一個類,可以被任意權限修飾符修飾,靜態和非靜態屬性,final和非final屬性,可以有抽象方法和非抽象方法;

接口只能被public,final修飾,只能有靜態方法,即使沒有顯示的聲明,而且是不可修改的;

區別三:抽象的事物不同:抽象類是對類的抽象,接口是對行為的抽象; 抽象類是對整個類抽象,包括屬性,行為; 接口是對類的行為(局部)進行抽象;

區別四:定義的時候,定義抽象類和接口的思想不同; 設計抽象類是自下而上的過程,我子類需要,所以我定義抽象類; 設計接口是自上而下的過程,我接口規范某一行為,我某類需要這個行為,我實現某接口;

核心區別:

調用者使用動機不同,實現接口是為了使用他規范的某一個行為;

繼承抽象類是為了使用這個類屬性和行為.

再簡單點說:

我們知道抽象類是從子類中發現公共部分,然后泛化成抽象類,子類繼承該父類即可,但是接口不同。實現它的子類可以不存在任何關系,共同之處。例如貓、狗可以抽象成一個動物類抽象類,具備叫的方法。鳥、飛機可以實現飛Fly接口,具備飛的行為,這里我們總不能將鳥、飛機共用一個父類吧!所以說抽象類所體現的是一種繼承關系,要想使得繼承關系合理,父類和派生類之間必須存在"

is

-a"關系,即父類和派生類在概念本質上應該是相同的。對于接口則不然,并不要求接口的實現者和接口定義在概念本質上是一致的,僅僅是實現了接口定義的規則而已。

Java接口和抽象類的區別

一、Java接口和抽象類的相同點

(1)都不能被實例化。

(2)接口的實現類或抽象類的子類都只有實現了接口或抽象類中的方法后才能實例化。

二、Java接口和抽象類的不同點

(1)接口只有定義,不能有方法的實現,java1.8中可以定義default方法體,而抽象類可以有定義與實現,方法可在抽象類中實現。

(2)實現接口的關鍵字為implements,繼承抽象類的關鍵字為extends。一個類可以實現多個接口,但一個類只能繼承一個抽象類。所以,使用接口可以間接地實現多重繼承。

(3)接口強調特定功能的實現,而抽象類強調所屬關系。

(4)接口成員變量默認為publicstaticfinal,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結尾,不帶花括號。

如何理解java的抽象類和接口的區別

首先,來理解一下抽象類和接口的概念。

眾所周知,Java是面向對象的程序語言,而面向對象中的所有的對象,大都是通過類來描述的。相反,并不是所有的類都適合來描述對象,比如抽象類。抽象類中沒有足夠的信息來描述一個具體的對象,所以它是抽象的。

而接口,是高度抽象類型,是抽象方法的集合,接口并不是類,而是對類的一組需求的描述。這些類要遵循接口描述的統一格式來定義。如果類遵從了某個特定接口,就代表它履行了這項服務。

然后,來理解一下抽象類和接口的相同點。

其一,都不能被實例化。

其二,接口只有在其實現類實現了其中所有的方法、抽象類的子類也都實現了所有的抽象方法后,才可以被實例化。

再然后,來理解一下抽象類和接口的不同點。

抽象類:

abstract關鍵字修飾抽象方法只有聲明,無方法體只能繼承不能實例化包含抽象方法的類一定是抽象類,但抽象類不一定包含抽象方法抽象類中的抽象方法的修飾符只能是public或者protected,默認為public一個類只能繼承一個抽象類子類繼承抽象類時,必須實現全部的抽象方法,否則也必須為抽象類可以包含成員變量、成員方法、構造方法;但是構造方法不能用于實例化,只是供子類調用

如抽象類Animal,有成員屬性name、構造方法:

接口:

interface關鍵字修飾方法只能有聲明,不能有方法體,默認為publicabstract。JDK1.8之后,可以有default類型的方法,可以有方法體只能實現不能實例化所有方法只能是publicabstract。JDK1.8之后,可以有default類型的方法,可以有方法體一個類可以實現多個接口可以包含變量,但隱式默認為publicstaticfinalJDK1.8中的新特性,新增了默認方法(default):允許接口含有非抽象的方法,但必須用default修飾;default方法可以子類調用,子類也可不比對其實現;如子類實現了多個接口,且這些接口均包含有默認方法,則子類必須重寫該默認方法。新增了靜態方法:允許接口使用static關鍵字修飾方法并提供實現,即為靜態方法;接口的靜態方法只能通過接口進行調用,調用方式為:接口名:方法名。

如接口Climb,通用行為climb:

舉個栗子,Cat類繼承Animal、且實現Climb,具有動物特性和攀爬行為:

運行一下,看一下調用順序和結果。

果然,先調用了抽象父類的構造方法,然后是子類的構造方法。

最后,來總結一下抽象類和接口。

接口的設計目的為:對類的行為進行約束,是一種通用的行為規范;

抽象類的設計目的為:類的通用模板,提高代碼復用性。

抽象類和接口的區別

1.接口是行為的抽象,是一種行為的規范,接口是likea的關系;抽象是對類的抽象,是一種模板設計,抽象類是isa的關系。

2.接口沒有構造方法,而抽象類有構造方法,其方法一般給子類使用

3.接口只有定義,不能有方法的實現,java1.8中可以定義default方法體,而抽象類可以有定義與實現,方法可在抽象類中實現。

4.抽象體現出了繼承關系,繼承只能單繼承。接口提現出來了實現的關系,實現可以多實現。接口強調特定功能的實現,而抽象類強調所屬關系。

5.接口成員變量默認為publicstaticfinal,必須賦初值,不能被修改;其所有的成員方法都是publicabstract的。

抽象類中成員變量默認default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結尾,不帶花括號。

返回列表
上一篇:
下一篇: