C#类的继承、方法重写、多态

方法的重写(override)

父类中方法用virtual修饰,子类中方法用override修饰,构成了方法的重写,子类函数成员对父类函数成员的版本更新。此时函数的行为是由对象决定的,即实现了多态。

  class Program
    {
        public static int pi = 12;
        static void Main(string[] args)
        {
            Person chinese = new Chinese();
            chinese.say();//打印出:中国人
            Console.ReadKey();
        }
    }
   class Person//父类
    {
       public virtual void say()
        {
            Console.WriteLine("人类");
        }      
    } 
    class Chinese : Person//Chines是子类
    {
        public override void say()
        {
            Console.WriteLine("中国人");
        }
    }

方法的覆盖

父类和子类中具有相同的函数时,在子类中会将父类的方法隐藏。若仍使用父类引用创建子类对象时,会调用父类的方法,这时不是多态。尽量避免这种情况。

class Program
    {
        public static int pi = 12;
        static void Main(string[] args)
        {
            Person chinese = new Chinese();
            chinese.say();//打印出人类
            Console.ReadKey();
        }
    }
   class Person//父类
    {
       public  void say()
        {
            Console.WriteLine("人类");
        }      
    } 
    class Chinese : Person//Chines是子类
    {
        public  void say()
        {
            Console.WriteLine("中国人");
        }
    }

重写的条件

  • 方法成员(方法、属性等)
  • 方法可见(protected public)
  • 方法签名一致

猜你喜欢

转载自blog.csdn.net/weixin_41707267/article/details/84074092
今日推荐