2011-11-03 28 views
6

我已經搜遍了大量的S/O貼子,並沒有找到可以幫助我的答案。
我想了解什麼是抽象類和什麼是接口。我已閱讀這篇文章Real world abstract class usage simple samples,但我仍然不清楚這些概念。試圖在asp.net中獲取抽象類與接口的真實世界概念

我希望有人能以「人」對象的形式來描述現實世界。 所以繼承將是「人」 - >「員工」 - >「管理器」
和壓倒一切的將是「員工工資」將成爲「銷售員工提成」

我如何描述一個抽象類和Person對象概念中的接口?

回答

9

關於使用接口與抽象類有關的主題有不同的觀點。然而,一個接口應該表達一個對象的行爲(它可以做什麼),而抽象類應該定義它是什麼。從對象的角度來看,基本上「我可以」與「我是」相對。

所以,如果我們有一個Person,那是一個名詞,所以我們將使用一個抽象類來定義它。任何「是」人都會從該類繼承。如果我們想要定義一些行爲來描述Person能夠做到的並不能擴展到所有人的行爲,那麼我們應該把它放到一個接口中。

使用您定義的關係(人員 - >員工 - >經理),我們可以說員工執行IFirable並且經理執行IFirer。員工可以被解僱,經理可以解僱員工。

+0

很好的比喻。你是說這個人是一個抽象類嗎? – DotNetRookie

+1

@DNetNetwork - 我真的不想說是或不是。這一切都取決於你試圖解決什麼問題的背景。如果你需要能夠實例化一個「普通」的Person對象,那麼這沒有多大意義。在這種情況下(Person - > Employee - > Manager),製作基類Person,abstract可能是有意義的。 –

+1

我將用於與Person的接口的行爲是IEat,它可以聲明一個Feed方法。關鍵是界面切斷了,所以Mammal:IEat> Person>等和PlantLife:IEat> Cactus,所以一個人不是PlantLife(有些人喜歡它),但他們都以某種方式吃東西。 –

4

我很抱歉我沒有使用您的人員示例,請僅將此作爲擴展註釋。

我覺得最容易解釋的概念,對沒有編程背景的人,使用一個比喻,大多數人已經明白的東西:塑料成型!

比方說,我們正在塑料水果如:

的接口,如模具,它具有最終產品的形狀,但你可以用各種不同的顏色和材料填充。即使它們的顏色和質地完全不同,它們的形狀也將完全相同。

抽象類更像是需要額外步驟的東西,比如繪畫。你創建基本的塑料水果,然後發送它來獲得一些繪畫或毛皮粘在或什麼的。

未完成的水果就像一個抽象類,它對模具的最終產品有更多的定義,但它本身並不完整。它需要完成更多的工作,最終產品可以是完全不同的顏色,但它們基本上是一樣的。

我希望有幫助!

4

OK,讓我們來看看,如果我理解你的問題......

我覺得你conceptaully不確定的使用接口和抽象類之間的差異和/或相似之處。如果那是問題,那麼繼承我的「首發10」總結;

抽象類不能被實例化但可以包含實現細節,所以從一個派生一個類時,你得到的合同,你把抽象類中的任何默認行爲。例如,您的Person類(我將假設它爲此示例的一個抽象類)將定義派生的Employee或Manager類必須(至少)具有的合同,但也可以提供一些默認行爲。

另一方面的接口只指定合同;實施類必須做什麼,他們不能提供任何實施方式。例如,如果示例中的「Person」實際上是一個接口,它將定義實現它的任何類(Employee和Manager)必須執行的操作,但不能爲該合同提供任何默認實現。

另請注意,在許多語言(Java,C#,Delphi)中,只能繼承一個父類,但可以實現多個接口。