class Program
    {
        static void Main(string[] args)
        {
            Person p = new Chinese();//子类转为父类,向上转型
            /**
             * p.Speak() 之前我一直搞不明白为什么会执行Person.Speak()
             * 最近我觉得是因为在子类中用了new关键字,把父类的方法给隐藏掉,相当于子类的Speak方法是不属于父类的,和SpeakPTH同级.
             * */
            p.Speak();
            p = new English();
            p.Speak();//之所以调用English.Speak方法是因为把父类的Speak方法给重写了

            Console.ReadKey();
        }
    }

    class Person
    {
        public virtual void Speak()
        {
            Console.WriteLine("说话......");
        }

        public void Run()
        {
            Console.WriteLine("Running....");
        }
    }

    class Chinese : Person
    {
        //相当于子类的Speak方法与父类的Speak方法没有关系
        new public void Speak()
        {
            Console.WriteLine("说中国话......");
        }

        public void SpeakPTH()
        {
            Console.WriteLine("说普通话......");
        }
    }

    class English : Person
    {
        public override void Speak()
        {
            Console.WriteLine("说英语话......");
        }
    }

相关文章:

  • 2021-08-30
  • 2021-05-29
  • 2021-08-22
  • 2021-10-24
  • 2021-09-27
  • 2021-05-16
  • 2021-12-14
  • 2021-10-25
猜你喜欢
  • 2022-01-07
  • 2021-06-11
  • 2022-02-05
  • 2022-01-09
  • 2022-12-23
  • 2021-11-03
  • 2022-01-10
相关资源
相似解决方案