资源描述:
《抽象类与密封类》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、抽象类与密封类抽象类有时候基类并不与具体的事物相联系,而是只表达一种抽象的概念,用以为它的派生类提供一个公共的界面,为此,C#中引入了抽象类abstractclass的概念。定义抽象类的语句格式为:abstractclass类名{……//抽象类的成员定义}抽象类抽象类使用abstract修饰符,对抽象类的使用有以下几点规定:抽象类只能作为其它类的基类,它不能直接被实例化,而且对抽象类不能使用new操作符。抽象类如果含有抽象的变量或值,则它们要么是null类型,要么包含了对非抽象类的实例的引用。抽象类
2、允许包含抽象成员,虽然这不是必须的。抽象类不能同时又是密封的。抽象类abstractclassVehicle//定义汽车类{publicintwheels;//公有成员轮子个数protectedfloatweight;//保护成员重量publicVehicle(intw,floatg){wheels=w;weight=g;}publicvirtualvoidSpeak(){Console.WriteLine("thewvehicleisspeaking!");}};抽象类classCar:Vehic
3、le//定义轿车类{intpassengers;//私有成员乘客数publicCar(intw,floatg,intp):base(w,g){passengers=p;}publicoverridevoidSpeak(){Console.WriteLine("Thecarisspeaking:Di-di!");}};抽象类classTruck:Vehicle//定义卡车类{intpassengers;//私有成员乘客数floatload;//私有成员载重量publicTruck(intw,float
4、g,intp,floatl):base(w,g){passengers=p;load=l;}publicoverridevoidSpeak(){Console.WriteLine("Thetruckisspeaking:Ba-ba!");}};抽象类classProgram{staticvoidMain(string[]args){Carc1=newCar(4,2,5);Truckt1=newTruck(6,5,3,10);c1.Speak();t1.Speak();}}抽象方法由于抽象类本身表达的
5、是抽象的概念,因此类中的许多方法并不一定要有具体的实现,而只是留出一个接口来作为派生类重载的界面。举一个简单的例子,“图形”这个类是抽象的,它的成员方法“计算图形面积”也就没有实际的意义。面积只对“图形”的派生类比如“圆”、“三角形”这些非抽象的概念才有效,那么我们就可以把基类“图形”的成员方法“计算面积”声明为抽象的,具体的实现交给派生类通过重载来实现。抽象方法一个方法声明中如果加上abstract修饰符,我们称该方法为抽象方法(abstractmethod)。在抽象类中定义方法,由于无法为其实例
6、化任何代码,所以也需要将其定义为抽象的,定义格式如下:publicabstractvoid方法名(方法参数);抽象方法abstractclassVehicle//定义汽车类{publicintwheels;//公有成员轮子个数protectedfloatweight;//保护成员重量publicVehicle(intw,floatg){wheels=w;weight=g;}publicabstractvoidSpeak();};抽象方法classCar:Vehicle//定义轿车类{intpasse
7、ngers;//私有成员乘客数publicCar(intw,floatg,intp):base(w,g){passengers=p;}publicoverridevoidSpeak(){Console.WriteLine("Thecarisspeaking:Di-di!");}};抽象方法classTruck:Vehicle//定义卡车类{intpassengers;//私有成员乘客数floatload;//私有成员载重量publicTruck(intw,floatg,intp,floatl):ba
8、se(w,g){passengers=p;load=l;}publicoverridevoidSpeak(){Console.WriteLine("Thetruckisspeaking:Ba-ba!");}};封闭类如果所有的类都可以被继承,继承的滥用会带来什么后果,类的层次结构体系将变得十分庞大,类之间的关系杂乱无章,对类的理解和使用都会变得十分困难,有时候我们并不希望自己编写的类被继承,另一些时候,有的类已经没有再被继承的必要。C#提出了一个密封类sealedcl