我最近遇到了一个与创建类/建模有关的问题。在决定接口与抽象类时,正确的实现是什么?
模范动物王国作为类。使用你的类来创建表示为虚拟动物园的各种对象。在这个虚拟动物园中添加20只动物(在你的程序的主要方法中,让每只动物发出声音,这不应该是20种不同的物种)。
我想到了这个问题,并决定去抽象类动物而不是接口。然后,我添加了两个类Bird,哺乳动物由Animal继承。
我实现
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
}
我的问题是 -
- 什么是错我的执行?
- 根据 oops概念设计动物王国的正确方法是什么?
- 在什么情况下,我们使用接口而不是抽象类,反之亦然。 (与现实世界的例子)
请建议在线材料的一些爆炸,我可以改善这种问题。 谢谢。
嘿,很好的问题。我想你会得到更好的回应,并从Stack Overflow的一个名为Code Review的姊妹站点获得更多帮助。 https://codereview.stackexchange.com – raykrow
如果通过构造函数提供声音,则创建类的整个层次结构是没有意义的。你可以只有一个类'动物',并创建所有的动物:'var dog = new Animal(“狗的声音”);'。举例来说,有意义的是,这些类中的物种确实应该有一些特定的代码。 –