抽象方法与接口

时间:2013-02-04 23:04:53

标签: c# java oop interface abstract-class

我正在重构我的代码,所以我需要做出关于接口或抽象类的决定。 我有基类Player和继承基类的类,它们被称为VideoPlayer,MusicPlayer等。基类有抽象方法,没有实现(Play)。 那么,什么是更好的方式?将Play放入界面或将其保留在抽象类中。在MusicPlayer中播放与VideoPlayer中的播放器不同。我是用C#做的。

class Player
{
    abstract void Play();
} 

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

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

6 个答案:

答案 0 :(得分:8)

如果您没有要继承的任何基本功能,请使用接口。当您想要继承部分实现时,将使用抽象类。

答案 1 :(得分:6)

一个常见的事情是同时做两件事

a)提供界面。使用对象时使用界面(即调用play方法)。

b)提供一个基类,为具有常见管道的情况实现接口;常用方法等。这是实施者可选择使用的辅助手段

通过这种方式,IAmAPlayer的实现者可以简单地实现该接口,或者如果它们的用例与您的基类匹配,则可以使用它。

答案 2 :(得分:3)

通常,如果只是表示可以调用方法,则使用接口。该接口部分设计用于解决单继承问题。如果您没有在父级中实现常用方法,请使用接口。

答案 3 :(得分:1)

保持简单。如果你可以使用界面那么做。如果您不能使用接口,请使用抽象类。

答案 4 :(得分:1)

要考虑的一件事是,接口需要在抽象类不能实现的所有属性和方法中实现。小点,但有时您需要支持多个版本的程序集。

答案 5 :(得分:1)

您需要了解Interface Inheritance和Class继承之间的区别。

抽象类用于建模类似外观类的类层次结构(例如,Animal可以是抽象类,Human,Lion,Tiger可以是具体派生类)

接口用于2个相似/不相似的类之间的通信,它们不关心实现接口的类的类型(例如,Height可以是接口属性,它可以由Human,Building,Tree实现。如果你可以吃,你可以游泳,你可以死或任何东西......只需要你有高度的东西(在你上课实施))

现在你将在这里理解,对于你的例子,你可能需要同时拥有两者。如果您确定在许多其他类中使用Play方法的可能性,那么很好地使用接口实现,以便其他人通过接口使用方法。