virtual等具有具体实现的关键字。
2、抽象类中的抽象方法不能使用override virtual等具有具体实现的关键字。
3、抽象类中的抽象方法,子类继承后,必须override重载。
4、抽象类不能直接进行实例化。
5、抽象类与普通类之间继承满足多态的继承关系。即:子类从父类继承,若子类没有进行重载,它就直接调用父类中的方法(即使在父类、子类、孙子类这样的多重继承关系中,也满足多态的继承特性)。


namespace接口抽象类测试

{
   classProgram
   {
       static voidMain(string[] args)
       {
          interf2in2 = newclass1();
           in2.hi();
           in2.say();
 
           abst2c2 = newclass3();
           c2.abst2hi();
           c2.abst2say();
           c2.hi();
           c2.say();
           Console.ReadKey();
       }
   }
   interfaceinterf1
   {
       voidsay();
   }
interfaceinterf2:interf1
   {
      //new void say();         
       voidhi();
   }
  abstractclassabst1:interf2
   {
      public voidsay()
       {
           Console.WriteLine("abst1 say()");
       }
      public abstract voidhi();
       //public override void say2()//不能一开始就override
       //{
       //    Console.WriteLine("abst1 say()");
       //}
   }
 abstract classabst2 : abst1
   {
      public override voidhi()
       {
           Console.WriteLine("abst2 hi()");
       }
      public virtual void abst2say()
       {
          Console.WriteLine("abst2 abst2say()");
       }
     public virtual voidabst2hi()
       {
           Console.WriteLine("abst2 abst2hi()");
       }
   }
  classclass2 : abst2
   {
       public override void abst2say()
       {
          Console.WriteLine("class2 abst2say()");
       }    
   }
  classclass3 : class2
   {
      public override voidabst2hi()
       {
           Console.WriteLine("class3 abst2hi()");
       }    
   }
  classclass1 : abst1
   {
      public override voidhi()
       {
          Console.WriteLine("class1 hi()");
       }
   }
 }