【问题标题】:Abstract method vs interface抽象方法与接口
【发布时间】:2013-01-19 18:46:24
【问题描述】:

我正在重构我的代码,所以我需要对接口或抽象类做出决定。 我有基类 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.
    }
}

【问题讨论】:

标签: c# java oop interface abstract-class


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    一个常见的事情是两者都做

    a) 提供接口。并在消费对象时使用接口(即调用播放方法)。

    b) 提供一个基类来实现通用管道的情况下的接口;常用方法等。这是实现者可选使用的助手

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        保持简单。如果您可以使用接口,请执行此操作。如果不能使用接口,请使用抽象类。

        【讨论】:

          【解决方案5】:

          需要考虑的一点是,接口要求实现其所有属性和方法,而抽象类则不需要。次要问题,但有时您需要支持程序集的多个版本。

          【讨论】:

            【解决方案6】:

            您需要了解接口继承和类继承之间的区别。

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

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

            现在您将在这里了解到,对于您的示例,您可能需要两者兼有。如果您确定在许多其他类中使用 Play 方法的可能性,那么拥有接口实现非常好,这样其他人将通过接口使用方法。

            【讨论】:

              猜你喜欢
              • 2013-07-21
              • 2011-06-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-12-15
              • 1970-01-01
              • 2017-02-19
              • 1970-01-01
              相关资源
              最近更新 更多