欢迎来到天天文库
浏览记录
ID:50318651
大小:234.50 KB
页数:62页
时间:2020-03-08
《C#面向对象程序设计 教学课件 作者 王晶晶 主编第5章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章继承、多态与接口为了提高软件开发的效率,我们总是希望利用已有的成果,而又不受已有模块的限制,具有足够的灵活性。C#这一面向对象的程序设计语言所具有的继承和多态的特征能够很好的满足这一需求,极大地提高软件模块的可重用性和可扩充性,缩短了程序开发时间,提高软件开发效率。遗憾的是,C#只支持单继承,即一个派生类只能有一个基类,但现实生活中普遍存在多继承的关系,即一个派生类可以有一个以上的基类,为了满足多继承的需要,C#使用“接口”来解决该问题。5.1继承继承是软件重用的一种形式,通过吸收已有类的数据和行为,并用新的功能进行扩充,来创建新的类。也就是说,类可以从另一个类继
2、承得到,被继承的类称为基类(或父类),通过继承产生的新类称为派生类(或子类)。派生类继承了基类中所有的数据和功能,并能随心所欲地使用这些数据和功能。5.1.1定义派生类[访问修饰符]class派生类名:基类名{...//派生类代码}例5-1类Sales派生于Employee类Sales类派生于Employee类,虽然Sales类中没有编写任何代码,但是通过继承,可以直接使用Employee类中的程序代码。usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplic
3、ation1{publicclassEmployee{stringID;stringempName;doublebaseSalary;publicEmployee(){ID="999";empName="Miles";baseSalary=3000;}publicEmployee(stringID,doublebaseSalary){this.ID=ID;this.baseSalary=baseSalary;;}publicstringEmpId{set{ID=value;}get{returnID;}}publicdoubleSalary{get{returnbase
4、Salary+200;}}}publicclassSales:Employee{}publicclassTest{staticvoidMain(){Saless1=newSales();s1.EmpId="001";Console.WriteLine("{0},{1}",s1.EmpId,s1.Salary);}}}程序运行结果如图5-1所示。图5-1程序运行结果说明:(1)基类成员通过继承成为派生类的成员后,保持原来的访问性质不变;(2)基类的private成员只能在基类的内部被访问,派生类虽然继承了基类的private成员,但是无法直接访问基类的private成员
5、。比如上个程序中,Sales类继承了基类Employee类的所有成员,而ID,empName,baseSalary是Employee类的private成员,在Sales中是无法直接访问的,我们可以通过基类Employee提供的public成员EmpId,Salary来间接操作基类的私有成员。(3)C#中不支持多重继承,一个类的基类必须是唯一的。5.1.2派生类的构造函数和析构函数派生类的构造函数和析构函数分别用来完成对象的初始化工作和收尾工作的。在派生类中,基类的成员虽然被继承,但是这些成员的初始化仍然由基类的构造函数来完成,所以,实例化一个派生类的对象时,先调用基类
6、的构造函数,然后调用派生类的构造函数。而析构函数的调用顺序正好相反。例5-2构造函数和析构函数的调用顺序usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplication1{publicclassParentClass{publicParentClass(){Console.WriteLine("Parentconstructor");}publicvoidprint(){Console.WriteLine("IamaParentclass");}~Paren
7、tClass(){Console.WriteLine("ParentDestructor");}}publicclassChildClass:ParentClass{publicChildClass(){Console.WriteLine("ChildClassConstructor");}~ChildClass(){Console.WriteLine("ChildClassDestructor");}}classProgram{staticvoidMain(string[]args){ChildClasschild=newChildCl
此文档下载收益归作者所有