介面和抽象類有什麼區別?

時間 2021-05-29 22:24:17

1樓:知道自己不知道

個人愚見:

介面是對不同型別事物的抽象;比如飛機和鳥不是同類,但是都有fly()功能,於是可以對兩者進行抽象出fly();

2. 抽象類是對同類事物的抽象;比如狗會叫,貓也會叫,他們都是動物類,於是可以在基類中抽象出乙個say()的行為;

2樓:迷途書童

如果僅說乙個區別,那就是設計原則的不一樣, 這是最根本的不一樣

抽象類A側重於描述B is kind of A 這樣一種關係, 這是一種強耦合的關係

介面A側重於描述 A has an ability to do something

為什麼這裡不提介面是一種約束?因為在繼承抽象類的時候,子類也需要重寫父類的一些方法,也遵守方法簽名,這也是約束。 所以僅僅從約束這個角度來說,不足以區分抽象類和介面。

從語法特性上來說,乙個類可以實現多個介面,這裡隱含了乙個重要的思想:組合。我們知道這個世界上的萬事萬物都是組合出來的,我們從而可以得出結論:

基於介面設計的靈活度要比基於抽象類設計的靈活度高。

最後,再白話總結一下

如果我們要解決或者回答 「我和你是不是一夥的?」 這種類似的問題,盡量往抽象類上面靠

如果我們要解決或者回答 「你有什麼能力?」 這種類似的問題,盡量往介面上面靠

3樓:

抽象類可以有構造方法介面不行

抽象類可以有普通成員變數介面沒有

抽象類可以有非抽象的方法介面必須全部抽象

抽象類的訪問型別都可以介面只能是 public abstract乙個類可以實現多個介面但只能繼承乙個抽象類

4樓:夕月

1.介面的所有方法都必須是抽象方法,抽象類裡可以有非抽象方法2.介面的所有方法與屬性都是公有的,抽象類可以有私有的屬性和方法3.

普通類如果要實現介面的話,就必須實現介面的所有方法,但可以把普通類定義為抽象類來選擇性重寫介面的方法.

4.對普通類而言介面的所有方法都必須被實現,而抽象類的抽象方法必須被實現,非抽象方法可以不被實現.

5.普通類可以對介面可以實現多繼承,對抽象類只能繼承乙個,但是抽象類可以繼承多個介面來實現多繼承

5樓:江北

從大的方面來看,介面是更加抽象的抽象類。

並且從使用上來看,抽象類是is a 的關係,介面是like a的關係從語法書上看,

1.抽象類也有類的特性–單繼承,而介面則可以多實現。

2.抽象類除了無法被例項化外,其他地方和普通類非常類似,除了擁有抽象方法外,也可以擁有自己的普通成員變數與普通方法;而介面只能有抽象方法(public abstract),而且變數必須為static final。

6樓:只增笑耳Jason

介面的目標是描述在記憶體中多種、大量例項物件的共性特徵。抽象類的目標是類設計的內聚性,feature和state的互動性。

介面對state毫無興趣

7樓:跳跳的毛駱駝

簡單的說,介面就是僅是抽象方法的集合,乙個類可以有多個介面,就好比乙個沒有主權的國家,雖然定製了一些政策,但是確是被各個列強利用的工具,抽象類,就是抽象類方法集合,也可以包含例項方法,但是乙個類只能繼承乙個抽象類.就好比日本,雖然制定了一些政策,同時也可以有一些主權,但是確僅只能被乙個美國指揮來指揮去.

8樓:

簡單來說,

介面是公開的,裡面不能有私有的方法或變數,是用於讓別人使用的,而抽象類是可以有私有方法或私有變數的,

另外,實現介面的一定要實現介面裡定義的所有方法,而實現抽象類可以有選擇地重寫需要用到的方法,一般的應用裡,最頂級的是介面,然後是抽象類實現介面,最後才到具體類實現。

還有,介面可以實現多重繼承,而乙個類只能繼承乙個超類,但可以通過繼承多個介面實現多重繼承,介面還有標識(裡面沒有任何方法,如Remote介面)和資料共享(裡面的變數全是常量)的作用.

Java中抽象類和介面的具體區別是什麼?

東城 比如說乙個海鷗和乙個波音747,海鷗是鳥的例項化,鳥是海鷗的抽象類 同樣波音747也是飛機的抽象類,鳥和飛機分別是海鷗和747的父類 但是他們都有相同的特點,比如說會飛 但是乙個類只能繼承乙個父類 不能再繼承其他類 如果要統一這些東西的其他共同特點,就定義介面,根本特質就定義為父類不知道說的對...

美術造型類和設計類有什麼區別

HEHETUT 1,觀察方法有區別 純藝術觀察物件是客觀範疇,人物景色皆可入畫設計類的觀察物件多是人和物之間的關係,是建築,園林,產品 2,表達的技法有區別 純藝術是對客觀事物的主觀表達,是無標準的語言,觀畫者通過看思悟,去理解畫者的呈現。所以技法豐富,不拘一格。設計類的造型技法是一種標準化的語言,...

如何生動的解釋為什麼java中要用抽象類

軟體質量保障 在使用上,可以理解抽象類是對介面類的乙個擴充套件 介面類是抽象類的乙個子集 分析如下 抽象類可以沒有抽象方法 某個類可以在不提供抽象方法的前提下,宣告為抽象類 一旦乙個類被宣告為抽象類,就不能夠被直接例項化 抽象類和介面的區別 區別 子類只能繼承乙個抽象類,不能繼承多個子類可以實現多個...