2013-02-04 125 views
1

我重構我的代碼,所以我需要做出關於接口或抽象類的決定。 我有基類播放器和繼承基類的稱爲VideoPlayer,MusicPlayer等的類。基類有沒有實現的抽象方法(Play)。 那麼,什麼是更好的方法?將Play放在界面中或放在抽象類中。在MusicPlayer中播放與在VideoPlayer中播放器不一樣。我在C#中這樣做。抽象方法vs接口

class Player 
{ 
    abstract void Play(); 
} 

class VideoPlayer : Player 
{ 
    void Play() 
    { 
     //Some code. 
    } 
} 

class MusicPlayer : Player 
{ 
    void Play() 
    { 
     //Some code. 
    } 
} 
+0

兩者都好。作爲替代方案,您可以提供一個接口以及一個實現它的骨架抽象類。儘管如此,你似乎不需要這樣的實現。 – toniedzwiedz

+6

一個抽象類只有**纔有用,如果它真的做了什麼。有一個什麼都不做的抽象類對我來說沒有什麼意義。 –

+0

另請參見[接口vs基類](http://stackoverflow.com/q/56867/1037210),[抽象類與接口](http://www.codeproject.com/Articles/11155/Abstract-Class-與接口) – Lion

回答

6

一個共同的事情是做兩個

a)提供接口。當你消耗對象時使用接口(即調用播放方法)。

b)中提供一個實現爲在有共同的管道的情況下的接口的基類;常用的方法等,這是實施者任意地使用

以這種方式IAmAPlayer的實施者可以簡單地實現該接口,或者它們的使用情況的基礎類相匹配,他們可以使用的輔助工具。

7

如果您沒有任何要繼承的基本功能,請使用接口。抽象類用於您想要繼承的部分實現。

3

一般來說,如果只是以表示一種方法可以稱爲你使用的接口。該接口部分設計用於解決單個繼承問題。如果您沒有在父級中實現常用方法,請使用接口。

1

保持簡單。如果你可以使用一個接口來做到這一點。如果您不能使用接口,請使用抽象類。

1

有一點要考慮,接口要求所有的屬性和方法,其中抽象類沒有得以實施。小問題,但有時你需要支持程序集的多個版本。

0

您需要了解接口繼承和類繼承的區別。

抽象類被用於建模外觀類似的類的一個類層次結構(例如動物可以是抽象類和人類,獅子,老虎可在混凝土派生類)之間

接口用於通信2相似/非類似的類,它不關心實現Interface的類的類型(例如,Height可以是接口屬性,它可以由Human,Building,Tree實現)。無論你是否可以吃東西,你都可以游泳,你可以死或任何東西..它重要的只是你需要有高度(在你的類實現))

現在,在這裏你會明白一個事情,你比如說你可能需要兼得。如果您確信在其他許多類中使用Play方法的可能性,則非常適合使用接口實現,以便其他類將通過Interface使用方法。