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

2021-03-19 18:19:07 字數 3998 閱讀 7391

1樓:du瓶邪

1. c++沒有abstract. vc提供了一個inte***ce

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

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

2樓:飄散在天涯

抽象類只能作為基類,提供介面,不能有例項。

普通類既可以作為基類,又可以有例項。

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

3樓:靠名真tm難起

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

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

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

4樓:匿名使用者

簡單來說,

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

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

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

5樓:仲維傳媒

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

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

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

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

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

6樓:匿名使用者

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

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

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

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

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

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

7樓:手機使用者

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

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

8樓:好程式設計師

區別:

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++中抽象類到底有什麼用處?

9樓:匿名使用者

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

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

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

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

pet pets = new pet ;

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

10樓:匿名使用者

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

11樓:手機使用者

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

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

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

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

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

你大概明白了吧

12樓:匿名使用者

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

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

可以被繼承,並且抽象 類一般情況就是用來被繼承的。一個類繼承了抽象類,就必須實現抽象類中的所有的抽象方法。抽象類 抽象類往往用來表徵對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在程式設計語句中用 abstract 修飾的類是抽象類。在c 中,含...

java中抽象類的構造方法抽象麼

抽象類可以有構造方法,只是不能直接建立抽象類的例項物件而已。在繼承了抽象類的子類中通過super 引數列表 呼叫抽象類中的構造方法 示例 如下 抽象類和抽象方法什麼關係?抽象類中可能有抽象方法,也可能沒有抽象方法。那位說,就跟沒說一樣,那抽象類和抽象方法都叫抽象,他們必定有關係,那關係是什麼呢?如果...

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

介面中的方法只能是定義不可以有實現,而且所有成員預設均為公有的,實現介面時必須實現該介面定義的所有方法。介面可以多重繼承。而抽象類中則可以存在私有成員,方法允許有實現,繼承抽象後可以不去實現該抽象類的抽象方法 java中抽象類和介面的區別 簡單來說,介面是公開的,裡面不能有私有的方法或變數,是用於讓...