多态(虚方法)
使用虚方法实现“多态”
背景:
class Animal
{
public string name; public int age; public float temperature;
public void Eat()
{
Console.WriteLine("Animal 吃东西");
}
}
class Wolf : Animal
{
public string color;
public void hunt(){}
public void Eat()
{
Console.WriteLine("Wolf 吃 羊");
}
}
class Fish:Animal
{
public void Swim() { }
public void Eat()
{
Console.WriteLine("Fish 吃东西 小Fish");
}
}
{
public string name; public int age; public float temperature;
public void Eat()
{
Console.WriteLine("Animal 吃东西");
}
}
class Wolf : Animal
{
public string color;
public void hunt(){}
public void Eat()
{
Console.WriteLine("Wolf 吃 羊");
}
}
class Fish:Animal
{
public void Swim() { }
public void Eat()
{
Console.WriteLine("Fish 吃东西 小Fish");
}
}
在main方法中使用这段代码
Wolf hui = new Wolf();
hui.Eat();
Fish jin = new Fish();
jin.Eat();
hui.Eat();
Fish jin = new Fish();
jin.Eat();
发现,使用的Eat方法都是派生类的。
但是,如果这样使用
Animal a;
a = hui;
a.Eat();
a = jin;
a.Eat();
a = hui;
a.Eat();
a = jin;
a.Eat();
使用的Eat方法,却是基类的!!!
这显然不是我们想要的。
我们需要,根据对象运行时,所属类的不同,调用相应类的方法。
这就是多态
关键词 virtual override。在基类中的方法,加上修饰符virtual ,在派生类中加上override 。代码如下:
class Animal
{
public string name; public int age; public float temperature;
public virtual void Eat()
{
Console.WriteLine("Animal 吃东西");
}
}
class Wolf : Animal
{
public string color;
public void hunt(){}
public override void Eat()
{
Console.WriteLine("Wolf 吃 羊");
}
}
class Fish:Animal
{
public void Swim() { }
public override void Eat()
{
Console.WriteLine("Fish 吃东西 小Fish");
}
}
{
public string name; public int age; public float temperature;
public virtual void Eat()
{
Console.WriteLine("Animal 吃东西");
}
}
class Wolf : Animal
{
public string color;
public void hunt(){}
public override void Eat()
{
Console.WriteLine("Wolf 吃 羊");
}
}
class Fish:Animal
{
public void Swim() { }
public override void Eat()
{
Console.WriteLine("Fish 吃东西 小Fish");
}
}
再看看程序运行的结果