c#基础-19.重写(override)和覆盖(new)的区别

Posted mr.chenyuelin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#基础-19.重写(override)和覆盖(new)的区别相关的知识,希望对你有一定的参考价值。

重写 override
用 virtual 修饰的方法,叫虚方法。

重写会改变父类方法的功能。

覆盖 new
在子类中用 new 修饰 定义的与父类中同名的方法,叫覆盖。

覆盖不会改变父类方法的功能。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace @override
{
    class Animal
    {
        public virtual void Run()
        {
            Console.WriteLine("Run,Animal");
        }
    }
    class Pig : Animal
    {
        public override void Run()
        {
            Console.WriteLine("Run,Pig");
        }
    }
    class Cat : Animal
    {
        public new void Run()
        {
            Console.WriteLine("Run,Cat");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Animal a1 = new Pig();//override子类重写父类,原父类方法体不会变
            a1.Run();//Run,Pig
            Animal a2 = new Cat();//new覆盖子类方法
            a2.Run();//Run,Animal
            Console.ReadKey();
        }
    }
}

以上是关于c#基础-19.重写(override)和覆盖(new)的区别的主要内容,如果未能解决你的问题,请参考以下文章

c#中 override 和overload 的区别

C#中override和overload的区别

覆写(Override)和重载(Overload)的比较

Override(重写)和Overload(重载)的区别

请问重载overload,覆盖override,重写overwrite,这三者之间有啥区别呢?

重写(覆盖,Override)和重载(Overload)的区别