在本文中,我们讨论OOP中的热点之一:抽象类。抽象类在各个编程语言中概念是一致的,但是c#稍微有些不一样。本文中我们会通过代码来实现抽象类,并一一进行解析。
抽象类
在微软的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(四):多态和继承(抽象类)