c抽象類和普通類的區別,java中抽象類和介面的區別?

2021-03-04 05:29:17 字數 5022 閱讀 4043

1樓:田溫商煙

1.c++沒有abstract.

vc提供了乙個inte***ce

2.抽象類就是指不能例項化的類,因為它們包含了純虛方法。

3.虛函式是在申明的時候用了關鍵字virtual的類的(非靜態)成員函式

java中抽象類和介面的區別?

2樓:靠名真tm難起

抽象類是用來捕捉子類的通用特性的 。它不能被例項化,只能被用作子類的超類。抽象類是被用來建立繼承層級裡子類的模板。

介面是抽象方法的集合。如果乙個類實現了某個介面,那麼它就繼承了這個介面的抽象方法。這就像契約模式,如果實現了這個介面,那麼就必須確保使用這些方法。

介面只是一種形式,介面自身不能做任何事情。

3樓:匿名使用者

簡單來說,

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

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

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

4樓:仲維傳媒

「抽象類」和「介面」的區別如下:

1) 在抽象類中可以寫非抽象的方法,從而避免在子類中重複書寫他們,這樣可以提高**的復用性,這是抽象類的優勢;介面中只能有抽象的方法。

2) 乙個類只能繼承乙個直接父類,這個父類可以是具體的類也可是抽象類;但是乙個類可以實現多個介面。

圖中如果sparrow繼承類bird 類 ,boyin繼承airplane類,sparrow 和boyin想使用同樣的flay方法那麼是沒有辦法實現的,因為類的繼承是單繼承。

如果bird和airplane是介面那麼boyin想使用同樣的flay方法就很簡單了。在寫乙個介面讓sparrow和boyin實現這個介面就可以了如下圖:

5樓:匿名使用者

抽象方法是必須實現的方法。就象動物都要呼吸。但是魚用鰓呼吸,豬用肺呼吸。

動物類要有呼吸方法。怎麼呼吸就是子類的事了。

現在有很多討論和建議提倡用inte***ce代替abstract類,兩者從理論上可以做一般性的混用,但是在實際應用中,他們還是有一定區別的。抽象類一般作為公共的父類為子類的擴充套件提供基礎,這裡的擴充套件包括了屬性上和行為上的。而介面一般來說不考慮屬性,只考慮方法,使得子類可以自由的填補或者擴充套件介面所定義的方法,就像java王子所說的事件中的介面卡就是乙個很好的應用。

用乙個簡單的例子,比如說乙個教師,我們把它作為乙個抽象類,有自己的屬性,比如說年齡,教育程度,教師編號等等,而教師也是分很多種類的,我們就可以繼承教師類而擴充套件特有的種類屬性,而普遍屬性已經直接繼承了下來。

而介面呢~還是拿教師做例子,教師的行為很多,除了和普通人相同的以外,還有職業相關的行為,比如改考卷,講課等等,我們把這些行為定義成無body的方法,作為乙個集合,它是乙個inte***ce。而教師張三李四的各自行為特點又有不同,那麼他們就可以擴充套件自己的行為body。從這點意義上來說, inte***ce偏重於行為。

總之,在許多情況下,介面確實可以代替抽象類,如果你不需要刻意表達屬性上的繼承的話。

6樓:手機使用者

因為java是單根繼承的,所以能用介面盡量用介面,c++的介面就是通過抽象類實現的

php的抽象類,介面的區別和選擇

7樓:好程式設計師

區別:

1、對介面的使用是通過關鍵字implements。對抽象類的使用是通過關鍵字extends。當然介面也可以通過關鍵字extends繼承。

2、介面中不可以宣告成員變數(包括類靜態變數),但是可以宣告類常量。抽象類中可以宣告各種型別成員變數,實現資料的封裝。(另java介面中的成員變數都要宣告為public static final型別)

<?php

abstract class father

abstract function meth2();

public $var1="var1";

public static $var2="var2";

const var3="var3";

}  class son extends father

}  $s=new son();

echo $s->var1."

";echo father::$var2."

";echo father::var3."

";inte***ce ifather

class ison implements ifather

}  $is=new ison();

echo ifather::ivar3;

?>

3、介面沒有建構函式,抽象類可以有建構函式。

4、介面中的方法預設都是public型別的,而抽象類中的方法可以使用private,protected,public來修飾。

5、乙個類可以同時實現多個介面,但乙個類只能繼承於乙個抽象類。

抽象類還是介面:

如果要建立乙個模型,這個模型將由一些緊密相關的物件採用,就可以使用抽象類。如果要建立將由一些不相關物件採用的功能,就使用介面。

如果必須從多個**繼承行為,就使用介面。

如果知道所有類都會共享乙個公共的行為實現,就使用抽象類,並在其中實現該行為。

標準c++中有沒有介面和純抽象類的概念?

8樓:匿名使用者

下面是c++的創造者的回答,供你參考

bjarne stroustrup:

我在對人們解釋這個問題的過程中遇到了很多問題,而且我也一直不能理解為什麼讓人們理解這個問題是如此困難。自c++出現那天起,就存在著包含資料成員的類和不包含資料成員的類。在過去,人們強調利用乙個最基礎的設施以及該設施內部的東西來構造軟體系統,而那個「最基本的設施」通常就是抽象基類。

從80年代中葉到80年代末,那些僅由虛函式組合而成的類通常都被稱為abcs(abstract base classes 抽象基類)。2023年,我在c++中加入了純虛函式的概念,乙個純虛函式必須被其派生類重寫。借助此概念,你可以在乙個c++類中通過將其成員函式宣告為純虛函式的方法表明該類是乙個純介面類。

從那以後,我就一直強調在c++中,有一種主要的使用類的方法就是讓該類不包含任何狀態,而僅僅作為乙個介面。

從c++的角度來看,乙個抽象類和乙個介面之間沒有任何區別。有時,我們習慣使用「純抽象類」這個詞來表示某個類僅僅只含有純虛函式(不包含任何資料成員),它是抽象類的最常見的形式。當我試圖向人們解釋這個概念時,我發現如果我不先向他們介紹純虛函式這個語言中被直接支援的概念,人們就很難接受它。

有些人僅僅因為可以在基類中放入一些資料成員,就覺得他們必須這樣做。他們這樣做,就等於構造了經典的不穩定基類,當然同時也就招致該結構所帶來的一切問題。當我向人們介紹c++中直接支援抽象基類的概念時,情況稍微好一些,不過仍然有許多人不能理解它。

我認為這是由於我自身的原因所造成的教育上的失敗 — 我低估了做這件事的難度。這與早些時候simula社團在理解新概念上的失敗異常相似。有些新概念難以理解,部分原因在於許多人並不是真的想去學習一些全新的東西,他們自以為自己已經知道了答案。

而一旦以為自己已經知道了答案,再去學一些新東西就會變得非常困難了。在2023年的《the c++ programming language》第二版中,有幾個例子描述了抽象類的概念,可不幸的是,我並沒有在全書從頭至尾都貫穿這個思想。

9樓:匿名使用者

沒有純抽象類,有抽象類,抽象類的定義是:定義了純虛函式的類為抽象類

介面沒有

c++中抽象類到底有什麼用處?

10樓:匿名使用者

抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在程式設計語句中用 abstract 修飾的類是抽象類。在c++中,含有純虛函式的類稱為抽象類,它不能生成物件;在java中,含有抽象方法的類稱為抽象類,同樣不能生成物件。

抽象類是不完整的,它只能用作基類。在物件導向方法中,抽象類主要用來進行型別隱藏和充當全域性變數的角色。只要把這些東西對應到生活中的概念就明白物件導向的設計本身**於生活,我們對事物的理解本身都是一樣的哲學,理解概念之後怎麼寫**就更容易掌握。

抽象類是表示部分地實現功能,比如把某些已經確定的功能實現了,而抽象的功能則表示未實現,因為不能確定子類用什麼方式實現它或者說把可能性和機會留給子類,比如對於寵物這個抽象類"睡覺「這個方法就是抽象的,因為子類的實現方法各有差異,狗經常待在牆邊陰涼處睡覺,而貓則爬到樹上睡覺,我們父類中不能把這個」個性「的東西放入」共性「的父類中,「共性」是它們都會睡覺,但具體怎麼睡覺則是」個性「,因此只能把它弄成抽象的,把機會留給子類來實現它。抽象類和抽象方法的目的是相同的。當子類實現這些抽象方法後就是叫」實現「,如果這個方法在父類中已經實現了不是抽象的而子類再來實現一次就是「覆蓋」或「重寫「了父類的方法,這2個都叫實現了」多型「特性。

「多型」就是某個「共性」在各個子類中表現出不同的「個性」,但都同時保留著「共性」。

pet pets = new pet ;

for(int i = 0;i < pets.length; i++)

11樓:匿名使用者

提供了做蛋糕的模子和一套流程,至於做出來的蛋糕具體是什麼口味還得由你自己決定,但至少能保證你做出來的是蛋糕而不是麵包或者別的什麼,是共性與個性的統一!

12樓:手機使用者

抽象類就像是乙個物種類一樣!

比如。抽象類就是鳥這個物種。

這個鳥是沒有這個動物的。

從這個鳥類裡面繼承出來了雞孔雀等。

然後虛函式就比方是特徵。比如雞的特徵就是不會飛。

你大概明白了吧

13樓:匿名使用者

便於重用,下次你用到抽象類中的小類別就可以不用重寫了

Java中抽象類和介面的區別,java中抽象類和介面的區別

簡單來說,介面是公開的,裡面不能有私有的方法或變數,是用於讓別人使用的,而抽象類是可以有私有方法或私有變數的,另外,實現介面的一定要實現介面裡定義的所有方法,而實現抽象類可以有選擇地重寫需要用到的方法,一般的應用裡,最頂級的是介面,然後是抽象類實現介面,最後才到具體類實現。還有,介面可以實現多重繼承...

java中抽象類可以繼承實體類嗎

抽象類可以繼承實體類,因為抽象類中不僅可以有抽象方法,也可以有非抽象方法,抽象類繼承了實體類則即包括自己的抽象方法也包括了繼承來的非抽象方法 1 抽象類只是乙個特殊的類,但是也具備類的特性。2 如果這個類中有抽象方法,那麼這個類必須定義為抽象類。3 如果這個抽象類繼承了別的抽象類,那麼可以不覆蓋抽象...

java中的抽象類和介面該怎麼理解?定義上有什麼區

在物件導向的概念中,我們知道 所有的物件都是通過類來描繪的,但是並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。抽象類往往用來表徵我們在對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把...