我最近遇到了一個與創建類/建模有關的問題。在決定接口與抽象類時,正確的實現是什麼?
模範動物王國作爲類。使用你的類來創建表示爲虛擬動物園的各種對象。在這個虛擬動物園中添加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(「狗的聲音」);'。舉例來說,有意義的是,這些類中的物種確實應該有一些特定的代碼。 –