抽象类、抽象方法

abstract public void Func(); 抽象方法不能有函数体{},派生类中必须得override重写;其所在的类必须声明为抽象类

abstract public class C  抽象类是无法实例化的。

virtual public void Func()  虚方法可以有函数体,可以在派生类中override重写,也可以不重写。

abstract public class Pet//当包含抽象方法时,必须用abstract声明
    {
        protected string Name;//protected 保护级别,派生类可访问
        public Pet(string name)//基类的构造函数
        {
            Name = name;
        }
        public void PrintName()
        {
            Console.WriteLine("Print"+Name);
        }

        //virtual public void Speak()   //虚方法//如果该方法够抽象,抽象到其实体是没有机会被用到并且都在该类的派生类中有各种不同实现的情况下,就可以改成抽象方法
        //{
        //    Console.WriteLine("I'm "+Name);  
        //}
        abstract public void Speak();//抽象方法,其所在类也得换为abstract声明。在其派生类中必须通过override做具体实现
    }
    public class Dog : Pet
    {
        public Dog(string name):base(name)//构造函数//用关键字base调用了基类的构造函数
        {
           
        }
        new public void PrintName()
        {
            Console.WriteLine("子打印"+base.Name);
        }
        override public void Speak()//重写基类Pet的抽象方法
        {
            Console.WriteLine("子说" + Name);
        }
    }
    public class Cat : Pet
    {
        public Cat(string name):base(name)//构造函数//用关键字base调用了基类的构造函数
        {
            
        }
        new public void PrintName()
        {
            Console.WriteLine("子打印" + Name);
        }
        override public void Speak()//重写基类Pet的抽象方法
        {
            Console.WriteLine("子说" + Name);
        }
    }
原文地址:https://www.cnblogs.com/cicily/p/10916444.html