C#中的抽象类(abstract)
1:抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法
2:抽象类不能被实例化
3:抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类
4:具体派生类必须覆盖基类的抽象方法
5:抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。
6:抽象类中的非抽象方法,如果该方法是静态,直接通过类调用就好,如果不是静态的,则需要通过继承这个抽象类的子类实例化的对象来调用。
7:抽象类中包含属性、虚方法、普通方法、抽象方法、构造方法、普通成员变量、静态成员变量
8:抽象类的成员可以使用公有或其他修饰符,接口中成员是隐式公有的,不需要修饰;
9:抽象类是概念的抽象,接口注重行为,抽象类不支持多重继承,而一个类可以实现多个接口。
下边是实例:
using System; namespace @abstract { class Program { static void Main(string[] args) { // 实例化对象 son son = new son(); // 调用重写后的抽象方法 son.getClass(); // 调用抽象类中非抽象方法 son.GetResult(); // 调用抽象类中的静态非抽象方法 AbsClass.GetUser(); Console.ReadLine(); } } /// <summary> /// 子类,继承抽象类 /// </summary> public class son : AbsClass { public override void getClass() { Console.WriteLine("我继承了AbsClass抽象类,并实现了其中的方法"); } } /// <summary> /// 声明一个抽象类 /// </summary> public abstract class AbsClass { /// <summary> /// 非抽象的字段 /// </summary> public int number; /// <summary> /// 构造函数 /// </summary> public AbsClass() { number = 10; } /// <summary> /// 非抽象方法 /// </summary> public void GetResult() { Console.WriteLine("非抽象方法:非抽象变量值为"+ number); } /// <summary> /// 非抽象静态方法 /// </summary> public static void GetUser() { Console.WriteLine("我是非抽象静态方法"); } /// <summary> /// 抽象方法 /// </summary> public abstract void getClass(); } }
上边的抽象类的例子可能不是很生动,具体的可以参考我在掘金的关于设计模式的一篇文章《设计模式(十六)之抽象工厂模式》这篇文章使用的语言就是C#,里边有很生动的例子