因爲,要使用多態,更改您的代碼:
public abstract class Animal
{
public abstract void makeChild();
}
public class Sheep : Animal
{
public override void makeChild()
{
Console.WriteLine("A lamb is born.");
}
}
public class Cow : Animal
{
public override void makeChild()
{
Console.WriteLine("A calf is born.");
}
}
public class Farm
{
public Animal myAnimal;
}
public class SheepFarm : Farm
{
public SheepFarm()
{
this.myAnimal = new Sheep();
this.myAnimal.makeChild();
}
}
public class CowFarm : Farm
{
public CowFarm()
{
this.myAnimal = new Cow();
this.myAnimal.makeChild();
}
}
,並使用下面的 「主要()」 方法:
class Program
{
static void Main(string[] args)
{
Farm sf = new SheepFarm();
Farm cf = new CowFarm();
}
}
不過,我應該指向這不是一個好的用例場景。多態性的一個更好的和更簡單的使用情況是擺脫農場類,並使用以下「的Main()」方法,而不是以前的一個:
class Program
{
static void Main(string[] args)
{
Animal[] animals = {
new Sheep(),
new Cow(),
new Sheep(),
new Cow(),
new Cow()
};
foreach (Animal animal in animals)
{
animal.makeChild();
}
}
}
是的,但是這有點兒失敗的目的..向下轉換隻是訪問的東西.. ickypants。 –
我可能會顯示OP如何安全地用'as'投射..因爲你現在已經打開了一堆蠕蟲的OP只是隨機啓動向下轉換到派生類......它可能不會成功:( –