c#基础学习(0706)之使用虚方法实现多态

使用虚方法实现多态

namespace _0706
{
    class Program
    {
        static void Main(string[] args)
        {
            //这个时候调用的是父类的方法
            Person p = new Person();
            Person p1 = new American();//这个时候调用的是American里面的方法
            p.SayNationality();

            //Person p1 = new Japanese();
            Person[] pers = new Person[5];
            pers[0] = new American();
            pers[1] = new Chanese();
            pers[2] = new Japanese();
            pers[3] = new Chanese();
            pers[4] = new American();
            //遍历pers数组
            for (int i = 0; i < pers.Length; i++)
            {
                //判断数组类型
                //if(pers[i] is American)
                //{
                //    ((American)pers[i]).SayNationality();
                //}else if(pers[i] is Chanese)
                //{
                //    ((Chanese)pers[i]).SayNationality();
                //}
                //else if (pers[i] is Japanese)
                //{
                //    ((Japanese)pers[i]).SayNationality();
                //}

                //将上面的判断简化
                pers[i].SayNationality();//这句话体现了多态,同样的方法,根据调用的对象不同,体现的内容
            }
            Console.ReadKey();
        }
    }
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Email { get; set; }
        //添加一个SayNationality()方法
        //第一步:将父类中的对应刚发前加virtual关键字,即:将对应的方法变成“虚方法”
        public virtual void SayNationality()
        {
            Console.WriteLine("地球人");
        }
    }
    public class American : Person
    {
        //通过使用override关键字将父类Person中的虚方法SayNationality重写为子类自己想要的。
        //说出自己的国籍
        public override void SayNationality()
        {
            Console.WriteLine("USA");
        }
    }
    public class Japanese : Person
    {
        public override void SayNationality()
        {
            Console.WriteLine("日本");
        }
    }
    public class Chanese : Person
    {
        public override void SayNationality()
        {
            Console.WriteLine("中国");
        }
    }
}

 

posted @ 2018-07-06 17:05  超哥20  阅读(184)  评论(0编辑  收藏  举报