首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在决定接口还是抽象类时,正确的实现是什么?

在决定接口还是抽象类时,正确的实现是什么?
EN

Stack Overflow用户
提问于 2017-11-25 17:48:17
回答 2查看 652关注 0票数 0

最近,我遇到了一个与类创建/建模相关的问题。

以动物王国为榜样。使用您的类创建各种对象,表示为虚拟动物园。增加20只动物到这个虚拟动物园(在你的程序的主要方法,让每个动物发出声音。这不应该是20个不同的物种)。

我考虑了这个问题,决定使用抽象类动物,而不是接口。然后我又增加了两类鸟,哺乳动物是由动物继承的。

我的实施

代码语言:javascript
运行
复制
  public abstract class Animal{

      abstract Sound MakeSound();
    }

    public class Bird : Animal
    {
       private Sound _sound;
       public Bird(Sound sound){
       _sound = sound;
    }
    public Sound MakeSound(){
          return _sound;
       }
    }
//same as above with Mammals

public class Program
{
  Animal crow = new Bird("Crow sound");
  Console.WriteLine(crow.MakeSound());

 Animal dog = new Mammal("Dog sound");
  Console.WriteLine(dog.MakeSound());

// and so on with other animals
}

我的问题是-

  1. 我的执行有什么问题?
  2. 根据oops的概念,设计动物王国的正确方法是什么?
  3. 在什么情况下,我们对抽象类使用接口,反之亦然。(与现实世界的例子)

请建议一些关于网上的材料,我可以改进这些问题。谢谢。

EN

Stack Overflow用户

发布于 2017-11-25 17:58:21

要使用接口的原因之一是C#不支持多重继承。

总的来说,我想把界面看作是能力或特性,而不是模型。

类似于:

代码语言:javascript
运行
复制
    public interface ISwimable
    {
         int SwimmingSpeed { get; set; }
    }

    public interface IWalkable
    {
        int RunningSpeed { get; set; }
    }

现在,如果我有一个生活在水中的动物,我想让它实现ISwimable,如果我有一个可以走路的动物,那么它的类应该实现IWalkable,如果两者都可以,它将实现两者。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47488900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档