由于类的继承,使得相同的方法既可以在基类中调用也可以在派生类中调用,因此,有了类的多态性,即同一种方法,多种姿态实现!
类的多态性可通过以下两种方法实现:
(1)抽象类:不需要使用基类实例化的对象。
把基类作为一个模板,它只需用于派生其他类,不能实例化(可类比于自然界中的蚂蚁,蚁后只需躺在家里繁殖下一代(派生),下一代陆陆续续出去工作(子类实例化),蚁后不用劳作!(抽象类))。
namespace Space
{
class Ant_Queen
{
public abstract void WorkPlan()
//抽象类中不能有方法体
}
class Ant1:Ant_Queen
{
public override void WorkPlan()
{
Console.WriteLine("我是蚂蚁1号,我出去工作啦");
}
}
class Ant2:Ant_Queen
{
public override void WorkPlan()
{
Console.WriteLine("我是蚂蚁2号,我出去工作啦");
}
}
class Program
{
static void Main(string[] args)
{
Ant_Queen[] ant_family = {small_ant1,small_ant2};
foreach (Ant_Queen ant in ant_family)
//抽象类不能实例!
ant.WorkPlan();
console.readKey();
}
}
注:
①抽象类中不能有方法体。
②抽象类不能实例!
(2)虚方法:需要使用基类实例化的对象。
基类派生完后也需要用到,即基类和派生类都可实例化(类比于人,妈妈生完宝宝,孩子工作了,妈妈也要工作)
namespace Space
{
class MM
{
public virtual void WorkPlan()
{
Console.WriteLine("我是妈妈,我出去工作啦");
}
}
class BB : MM
{
public override void WorkPlan()
{
Console.WriteLine("我是宝宝,我出去工作啦");
}
}
class Program
{
static void Main(string[] args)
{
MM mother = new MM();
BB son = new BB();//基类与派生类都要实例
MM[] family = { mother, son };
foreach (MM people in family)
people.WorkPlan();
Console.ReadKey();
}
}
}