//多态概念:在继承关系前提下,实例化出的不同对象,,这些对象调用相同的方法,但表现出不同的行为,就叫做多态。

using System;
using System.Collections.Generic;
using System.Text;

namespace 多态
{
class TrafficTool
{
public virtual void Run()
{
Console.WriteLine("启动");
}
public virtual void Stop()
{
Console.WriteLine("停止");
}

    public void Break()
    {
        Console.WriteLine("抛锚");
    }
}

}

using System;
using System.Collections.Generic;
using System.Text;

namespace 多态
{
class Car:TrafficTool
{
public override void Run()
{
base.Run();
Console.WriteLine("汽车启动");

    }

    public override void Stop()
    {
        base.Stop();
        Console.WriteLine("汽车停下");
    }
    public void Break()
    {
        Console.WriteLine("刹车");
    }
}

}

using System;
using System.Collections.Generic;
using System.Text;

namespace 多态
{
class AipPlan:TrafficTool
{
public override void Run()
{
base.Run();
Console.WriteLine("飞机启动");

    }

    public override void Stop()
    {
        base.Stop();
        Console.WriteLine("飞机停下");
    }
}

}

//程序实现
using System;

namespace 多态
{
class Program
{
static void Main(string[] args)
{
/*Car s = new Car();
AipPlan a = new AipPlan();
Driver d1 = new Driver();
d1.Drive(s);

        d1.Drive(a);*/

        TrafficTool t3 = new Car();
        TrafficTool t4 = new AipPlan();
        //基于“虚方法”的多态
        t3.Run();//启动汽车启动
        t4.Run();//启动飞机启动

        //里式转换
        TrafficTool t1 = new TrafficTool();
        TrafficTool t2 = new Car();//父类引用指向子类对象,
        t1.Break();//父类方法
        t2.Break();//父类方法

        //父类需要调用子类方法时,将父类转为子类(
        //父类引用指向子类对象时才能够转换)
        //ar c1 = (Car )t2;//强转
        bool r = t2 is Car;//可以转换返回真/不能转返回假
        Car c1 = t2 as Car;//可以转返回子类对象/不能转返回Null

        t1.Break();//父类方法
        c1.Break();//子类方法
    }
}

}