首页 > 代码库 > 抽象类和抽象方法

抽象类和抽象方法

 

抽象类表示一种抽象的概念, 只是希望以它为基类的派生类有共同的函数成员和数据成
员。抽象类使用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,必须用override13 { 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 Class122 { 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#抛弃了这一概念。