深入浅出OOP(四):多态和继承(抽象类)

  

在本文中,我们讨论OOP中的热点之一:抽象类。抽象类在各个编程语言中概念是一致的,但是c#稍微有些不一样。本文中我们会通过代码来实现抽象类,并一一进行解析。

抽象类

深入浅出OOP(四):多态和继承(抽象类)

在微软的MSDN中,对抽象类有如下的定义:

用抽象的关键字可定义抽象类,要求其子类必须实现抽象类的函数,属性等。抽象类不可被实例化。抽象类提供了统一的定义,用于其不同子类直接共享数据,函数。抽象类也可定义抽象函数。

,

抽象类实战

在Visual Studio中添加控制台程序,并命名为“<代码> InheritanceAndPolymorphism> ClassA.cs, 添加抽象类 ClassA。

 using 系统;namespace  InheritanceAndPolymorphism
  {,,,public  abstract  class  ClassA
  ,,,{
  
  ,,,},,,,///,& lt; summary>
  ,,,///,计划:,used 用execute 从而方法又是;,,,///,Contains  Main 方法又是;,,,///,& lt;/summary>
  ,,,public  class 程序
  ,,,{,,,,,,,private  static  void  Main (string [], args)
  ,,,,,,,{
  ,,,,,,,,,,,ClassA  ClassA =, new  ClassA ();
  ,,,,,,,,,,,Console.ReadKey ();
  ,,,,,,,}
  ,,,}
  }

编译报错:

编译时错误:不能创建抽象类或接口的一个实例“InheritanceAndPolymorphism.ClassA”

结论:无法用新关键字来实例化一个抽象类。

,

抽象类的非抽象函数

给抽象类ClassA添加一些非抽象函数的代码:

<>之前,,,,///,& lt; summary>   ,,,///,Abstract  class  ClassA ,,,///, & lt;/summary>   ,,,public  abstract  class  ClassA   ,,,{,,,,,,,public  int 一个,,,,,,,,,public  void  XXX ()   ,,,,,,,{   ,,,,,,,,,,,   ,,,,,,,}   ,,,},,,,///,& lt; summary>   ,,,///,计划:,used 用execute 从而方法又是;,,,///,Contains  Main 方法又是;,,,///,& lt;/summary>   ,,,public  class 程序   ,,,{,,,,,,,private  static  void  Main (string [], args)   ,,,,,,,{   ,,,,,,,,,,,ClassA  ClassA =, new  ClassA ();   ,,,,,,,,,,,Console.ReadKey ();   ,,,,,,,}   ,,,}

,

编译,依然报错。抽象类无论是否有抽象,非抽象函数,均无法通过新关键字来实例化。

,

抽象类作为基类

我们把抽象类作为基类,添加ClassB——使之继承自ClassA。

<>之前,,,,///,& lt; summary>   ,,,///,Abstract  class  ClassA ,,,///, & lt;/summary>   ,,,public  abstract  class  ClassA   ,,,{,,,,,,,public  int 一个,,,,,,,,,public  void  XXX ()   ,,,,,,,{   ,,,,,,,,,,,   ,,,,,,,}   ,,,},,,,///,& lt; summary>   ,,,///,Derived 类只,,,///,Class  Derived 得到abstract  Class  ClassA ,,,///, & lt;/summary>   ,,,public  class  ClassB: ClassA   ,,,{   ,,,,,,,   ,,,},,,,///,& lt; summary>   ,,,///,计划:,used 用execute 从而方法又是;,,,///,Contains  Main 方法又是;,,,///,& lt;/summary>   ,,,public  class 程序   ,,,{,,,,,,,private  static  void  Main (string [], args)   ,,,,,,,{   ,,,,,,,,,,,ClassB  ClassB =, new  ClassB ();   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

深入浅出OOP(四):多态和继承(抽象类)