2010-09-13 157 views
3

可能重複:
Interface vs Abstract Class (general OO)抽象類和接口之間有什麼區別?

我可以永遠實例化一個抽象類?如果是這樣,爲什麼我不把所有非密封類抽象化?

如果我不能實例化它,那麼與接口有什麼不同?抽象類是否具有「基礎」類功能?接口和抽象類之間的區別是否還有更多?

+3

**這是一個巨型重複的人。不要回答。它將被關閉並刪除。** – 2010-09-13 16:46:18

+0

@John Saunders - 對不起,重複。雖然看起來可能不像,但我在發帖之前搜索了一個有此問題的問題(我發現有幾個很接近,但不是上面那個)。無論如何,我的糟糕。我會在下次嘗試更努力的搜索。 – Vaccano 2010-09-13 16:50:30

+0

這不是針對你。這是針對那些很快回答問題的人,卻沒有意識到它必須是重複的。 – 2010-09-13 17:04:24

回答

0

首先,您只能從一個抽象類繼承。您可以將多個接口連接到一個類。

1

您不能直接創建抽象類的實例。但是,您可以提供方法和/或屬性實現,這是您在界面中無法實現的。您也只能繼承一個類,抽象或其他類,而您可以繼承(實現)儘可能多的接口。

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 
4

接口不提供實現。你也可以實現多個接口。

您可以在抽象類中提供實現,但只能從一個基類型繼承。

無論在哪種情況下,都不能直接實例化任一個。

1

抽象類:

  1. 抽象類可以包含抽象方法和非 抽象方法。

  2. 當非抽象類繼承自摘要 類時,非抽象類應爲繼承的抽象方法提供所有 實現。

接口:

  1. 接口也不過是純粹的抽象類即 接口只能包含函數聲明。

  2. 接口的所有成員默認爲公共 並且您不能提供任何訪問修飾符。

  3. 當一個類從接口繼承時, 繼承類應爲繼承成員提供 的實際實現。

0

接口定義了一個合約,你說你會對一組特定的方法簽名有所暗示。

抽象類只是意味着你不能直接創建它的一個新實例,你可以自由使用任何其他類的特性,即屬性。

7

你不能實例化一個抽象類。

抽象類和接口的區別在於抽象類可以有方法的默認實現,所以如果不在派生類中重寫它們,就會使用抽象基類實現。接口不能有任何實現。

相關問題