先明确以下关系
Animal Wolf Goat
public class Animal
{
public string name;
public int age;
public Animal(string n, int a)
{
name = n;
age = a;
Console.WriteLine("Animal构造方法");
}
public virtual void Eat()
{
Console.WriteLine("动物吃东西...");
}
}
{
public string name;
public int age;
public Animal(string n, int a)
{
name = n;
age = a;
Console.WriteLine("Animal构造方法");
}
public virtual void Eat()
{
Console.WriteLine("动物吃东西...");
}
}
public class Wolf : Animal
{ public void Eat()
{
Console.WriteLine("吃羊...");
}
}
{ public void Eat()
{
Console.WriteLine("吃羊...");
}
}
public class Goat : Animal
{
public void Eat()
{
Console.WriteLine("吃草...");
}
}
{
public void Eat()
{
Console.WriteLine("吃草...");
}
}
在main方法里,如下代码:
Animal a = new Wolf("huitai",2);
a.Eat();
a.Eat();
代码的意思是,动物a,是一只叫灰太的,2岁的小狼. a.eat(),输出的结果是什么? 你想,肯定是吃羊了
错!
是动物吃东西
这是因为,a.eat(),a虽然是狼,但些时被当动物看街 eat方法是animal的eat方法.
多态
试一下,在Animal类的eat方法前加virtual,在wofl的eat方法前加上override关键字.