黑马程序员------.Net基础之多态虚方法

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


namespace _04面向对象_多态
{
    class Program
    {
        static void Main(string[] args)
        {
            //封装、继承、多态
            //多态:就是一个对象能够表现出多种的类型(状态)


            //实现多态的三个手段:虚方法、抽象类、接口
            Chinese cn1 = new Chinese("张三三");
            Chinese cn2 = new Chinese("李思思");
            Japanese j1 = new Japanese("井边君");
            Japanese j2 = new Japanese("松下子");
            Korea k1 = new Korea("金正X思密达");
            Korea k2 = new Korea("李X博思密达");
            American a1 = new American("Green");
            American a2 = new American("Jim");
            English e1 = new English("李雷");
            English e2 = new English("韩梅梅");

            Person[] per = { cn1, cn2, j1, j2, k1, k2, a1, a2, e1, e2 };

            //使用虚方法来实现多态
            //第一步:将父类中的方法标记为virturl
            //第二部:将子类的方法标记为override 表示重写父类的方法
            for (int i = 0; i < per.Length; i++)
            {
                #region Old Method
                //if (per[i] is Chinese)
                //{
                //    ((Chinese)per[i]).SayHello();
                //}
                //else if (per[i] is Japanese)
                //{
                //    ((Japanese)per[i]).SayHello();
                //}
                //else if (per[i] is Korea)
                //{
                //    ((Korea)per[i]).SayHello();
                //}
                //else if (per[i] is American)
                //{
                //    ((American)per[i]).SayHello();
                //}
                //else
                //{
                //    ((English)per[i]).SayHello();
                //}
                //     per[i].SayHello();
                #endregion
                per[i].SayHello();


            }
            Console.ReadKey();
           //new:隐藏父类中的方法

        }
    }

    public class Person
    {
        public virtual void SayHello()
        {
            Console.WriteLine("我是人类");
        }

        public string Name
        {
            get;
            set;
        }
        public Person(string name)
        {
            this.Name = name;
        }
    }


    public class Chinese : Person
    {
        public override  void SayHello()
        {
            Console.WriteLine("我是中国人{0}",this.Name);
        }


        public Chinese(string name)
            : base(name)
        {

        }
    }

    public class Japanese : Person
    {
        //public override  void SayHello()
        //{
        //    Console.WriteLine("我是脚盆国人{0}",this.Name);
        //}

        public Japanese(string name)
            : base(name)
        {

        }
    }

    public class Korea : Person
    {
        public override   void SayHello()
        {
            Console.WriteLine("我是韩国棒之思密达{0}",this.Name);
        }


        public Korea(string name)
            : base(name)
        {
        }

    }

    public class American : Person
    {
        public override void SayHello()
        {
            Console.WriteLine("我是米国人{0}",this.Name);
        }


        public American(string name)
            : base(name)
        { 
            
        }
    }

    public  class English : Person
    {
        public override  void SayHello()
        {
            Console.WriteLine("我是大不列颠英国鸟{0}",this.Name);
        }
        public English(string name)
            : base(name)
        { 
            
        }
    }

}



---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值