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#,c#)