可能重複:
Interface vs Abstract Class (general OO)抽象類和接口之間有什麼區別?
我可以永遠實例化一個抽象類?如果是這樣,爲什麼我不把所有非密封類抽象化?
如果我不能實例化它,那麼與接口有什麼不同?抽象類是否具有「基礎」類功能?接口和抽象類之間的區別是否還有更多?
可能重複:
Interface vs Abstract Class (general OO)抽象類和接口之間有什麼區別?
我可以永遠實例化一個抽象類?如果是這樣,爲什麼我不把所有非密封類抽象化?
如果我不能實例化它,那麼與接口有什麼不同?抽象類是否具有「基礎」類功能?接口和抽象類之間的區別是否還有更多?
首先,您只能從一個抽象類繼承。您可以將多個接口連接到一個類。
您不能直接創建抽象類的實例。但是,您可以提供方法和/或屬性實現,這是您在界面中無法實現的。您也只能繼承一個類,抽象或其他類,而您可以繼承(實現)儘可能多的接口。
abstract class A
{
public int Foo() { return 1; } // implementation defined
}
class B : A
{
}
interface C
{
int Foo() {return 1;} // not legal, cannot provide implementation in interface
}
// ... somewhere else in code
A a = new A(); // not legal
A a = new B(); // legal
接口不提供實現。你也可以實現多個接口。
您可以在抽象類中提供實現,但只能從一個基類型繼承。
無論在哪種情況下,都不能直接實例化任一個。
抽象類:
抽象類可以包含抽象方法和非 抽象方法。
當非抽象類繼承自摘要 類時,非抽象類應爲繼承的抽象方法提供所有 實現。
接口:
接口也不過是純粹的抽象類即 接口只能包含函數聲明。
接口的所有成員默認爲公共 並且您不能提供任何訪問修飾符。
當一個類從接口繼承時, 繼承類應爲繼承成員提供 的實際實現。
接口定義了一個合約,你說你會對一組特定的方法簽名有所暗示。
抽象類只是意味着你不能直接創建它的一個新實例,你可以自由使用任何其他類的特性,即屬性。
你不能實例化一個抽象類。
抽象類和接口的區別在於抽象類可以有方法的默認實現,所以如果不在派生類中重寫它們,就會使用抽象基類實現。接口不能有任何實現。
**這是一個巨型重複的人。不要回答。它將被關閉並刪除。** – 2010-09-13 16:46:18
@John Saunders - 對不起,重複。雖然看起來可能不像,但我在發帖之前搜索了一個有此問題的問題(我發現有幾個很接近,但不是上面那個)。無論如何,我的糟糕。我會在下次嘗試更努力的搜索。 – Vaccano 2010-09-13 16:50:30
這不是針對你。這是針對那些很快回答問題的人,卻沒有意識到它必須是重複的。 – 2010-09-13 17:04:24