抽象类和抽象方法

抽象类表示一种抽象的概念, 只是希望以它为基类的派生类有共同的函数成员和数据成
员。抽象类使用abstract修饰符,对抽象类的使用有以下几点规定:
� 抽象类只能作为其它类的基类,它不能直接被实例化。
� 抽象类允许包含抽象成员,虽然这不是必须的。抽象成员用abstract修饰符修饰。
� 抽象类不能同时又是密封的。
� 抽象类的基类也可以是抽象类。 如果一个非抽象类的基类是抽象类, 则该类必须通过覆
盖来实现所有继承而来的抽象方法, 包括其抽象基类中的抽象方法, 如果该抽象基类从
其它抽象类派生,还应包括其它抽象类中的所有抽象方法。

请看下面的示例:

 1 abstract class Figure//抽象类定义
 2 { protected double x=0,y=0;
 3 public Figure(double a,double b)
 4 { x=a;
 5 y=b;
 6 }
 7 public abstract void Area();//抽象方法,无实现代码
 8 }
 9 class Square:Figure///类Square定义
10 { public Square(double a,double b):base(a,b)
11 {}
12 public override void Area()//不能使用new,必须用override
13 { Console.WriteLine("矩形面积是:{0}",x*y);}
14 }
15 class Circle:Figure///类Square定义
16 { public Circle(double a):base(a,a)
17 {}
18 public override void Area()
19 { Console.WriteLine("园面积是:{0}",3.14*x*y);}
20 }
21 class Class1
22 { static void Main(string[] args)
23 { Square s=new Square(20,30);
24 Circle c=new Circle(10);
25 s.Area();
26 c.Area();
27 }
28 }


程序输出结果为:
矩形面积是:600
园面积是:314
抽象类Figure提供了一个抽象方法Area(), 并没有实现它, 类Square和Circle从抽象类
Figure中继承方法Area(),分别具体实现计算矩形和园的面积。
在类的基本概念一节中, 定义一个描述个人情况的类Person, 它只是描述了一个人最一
般的属性和行为,因此不希望生成它的对象,可以定义它为抽象类。
注意: C++程序员在这里最容易犯错误。 C++中没有对抽象类进行直接声明的方法, 而认
为只要在类中定义了纯虚函数, 这个类就是一个抽象类。 纯虚函数的概念比较晦涩, 直观上
不容易为人们接受和掌握,因此C#抛弃了这一概念。