




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章继承和接口 1 内容提要 C 的继承机制派生类的构造与析构多态性继承和接口的用法目的要求 掌握继承和接口的声明及调用重点难点 继承 接口 2 7 1C 的继承机制 继承使面向对象技术能够提高软件开发效率的重要原因之一 其定义是 特殊类的对象拥有其一般类的全部属性与服务 称作特殊类对一般类的继承 3 7 1 1继承的基本知识继承 Inheritance 是自动地共享类 派生类和对象中的方法和数据的机制 它允许在既有类的基础上创建新类 新类从既有类中继承类成员 而且可以重新定义或加进新的成员 从而形成类的层次或等级 一般称被继承的类为基类或父类 而继承后产生的类为派生类或子类 4 类之间的继承关系的存在 对于在实际系统的开发中迅速建立原型 提高系统的可重用性和可扩充性 具有十分重要的意义 派生类的声明格式为 属性类修饰符class类名 基类 类体 在类声明中 通过在类名的后面加上冒号和基类名表示继承 5 例 usingSystem classEmployee publicstringEmpID publicstringEmpName classSales Employee publicint销售额 classTest staticvoidMain Saless1 newSales s1 EmpID 001 s1 EmpName 张三 s1 销售额 100 Console WriteLine 员工一 Console WriteLine 代号 0 名称 1 销售额 2 s1 ID s1 Name s1 销售额 运行结果如下 6 7 1 2base关键字 base关键字用于从派生类中访问基类的成员 它有两种基本用法 指定创建派生类实例时应调用的基类构造函数 用于调用基类的构造函数完成对基类成员的初始化工作 在派生类中访问基类成员 7 例 usingSystem classEmployee privatedoublebsalary 1000 doublepsalary publicintn publicdoubleEsalary Console Write 该员工进公司的年数为 n int Parse Console ReadLine psalary bsalary Math Pow 1 0 15 n 1 returnpsalary classDEmp Employee newpublicdoubleEsalary Console WriteLine 计算大专生员工的工资 return1 5 base Esalary classTest staticvoidMain DEmpdz newDEmp Console WriteLine 该员工的实际工资为 0 dz Esalary 8 7 1 3覆盖当一个实例方法声明包含一个override限定符时 这个方法就用相同的属性覆盖一个被继承的虚拟方法 则此方法被称为覆盖方法 覆盖方法声明不能包括new static virtual或abstract限定符中的任何一个 对于一个覆盖声明 除非下面都是可行的 否则 编译时就会出错 9 一个被覆盖的基本方法能被定位 被覆盖的基本方法是虚拟的 抽象的方法 既被覆盖的基本方法不能是静态的或非虚拟的 覆盖声明及被覆盖的基本方法具有相同的声明访问性 一个覆盖声明访问被覆盖的基本方法 10 7 2多态性面向对象的程序设计语言中 多态性是第三种最基本的特征 前两种是封装和继承 多态性 polymorphism来自希腊语 意思是多种形态 是指允许一个接口访问动作的通用类的性质 7 2 1多态性概述多态性是指在一般类中定义的属性或行为 被特殊类继承之后 可以具有不同数据类型或表现出不同的行为 这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义 11 7 2 2虚方法当方法声明中包含virtual修饰符时 方法就被称为虚方法 当没有virtual修饰符时 方法被称为非虚方法 虚方法定义中不能包含static abstract或override修饰符 非虚方法的执行是不变的 不管方法在从它声明的类的实例中还是在派生类中的实例中被调用 执行都是相同的 相反 虚方法的执行可以被派生类改变 具体实现是在派生类中重新定义此虚方法实现的 重新定义此虚方法时 要求方法名称 返回值类型 参数表中的参数个数 类型顺序都必须与基类中的虚方法完全一致 而且要在方法声明中加上override关键字 不能有new static或virtual修饰符 12 7 3接口接口是用来描述组件对外提供的服务 并在组件和组件之间 组件和客户之间定义交互的标准 组件一旦发布 它只能通过预先定义的接口来提供合理的 一致的服务 这种接口定义之间的稳定性使客户应用开发者能够构造出坚固的应用 13 7 3 1接口的定义1 声明一个接口定义了一个协议 一个实现了某个接口的类或结构必须符合它的协议 一个接口可以从多个基本接口继承 而一个类或结构也可以实现多个接口 接口可以包含方法 属性和索引等 即在接口中只能包含方法而不能包含变量 接口自己不为它所定义的成员提供具体实现 接口只是指定类中必须被实现的成员 格式 接口修饰符 interface接口名 基接口名 接口的成员 14 接口的继承接口具有不变性 但这并不意味着接口不再发展 类似于类的继承性 接口也可以继承和发展 接口可以从零或多个接口中继承 从多个接口中继承时 用 后跟被继承的接口名字 多个接口名之间用 分割 被继承的接口应该是可以访问到的 即不能从private或internal类型的接口继承 接口还不允许直接或间接地从自身继承 15 例 usingSystem interfaceIControl voidPaint interfaceITextBox IControl voidSetText stringtext interfaceIListBox IControl voidSetItems string items interfaceIComboBox ITextBox IListBox 对一个接口的继承也就继承了接口的所有成员 上例中 接口ITextBox和IListBox都从接口IControl中继承的 也就继承了接口IControl的Paint方法 IComboBox的基本接口是IControl ITextBox 和IListBox 即上面的接口IComboBox继承了接口IControl的Paint方法 ITextBox的SetText方法和IListBox的SetItems方法 16 7 3 2接口的成员1 接口成员的定义接口可以包含一个或多个成员 这些成员可以是方法 属性等 但不能是常量 运算符 构造函数或析构函数 而且不能包含任何静态成员 例 publicinterfaceImyList voidAdd strings intCount get 所有接口成员默认都是公有访问 即隐式地具有public访问权限 17 接口属性接口属性用接口属性声明来声明 接口属性修饰符 接口属性类型接口属性标识 接口属性访问器 接口属性声明的访问器与类属性声明的访问器的用法相同 其中 访问器可以为 get set get set set get 即接口的属性可以是只读 只写或可读可写的 18 3 接口事件接口事件用接口事件声明来声明 接口事件修饰符 new event类型名接口事件标识符 接口事件声明了一个事件 实现接口事件的类可以通过事件与其他类进行交流 19 接口索引接口索引使用接口索引声明来声明 接口索引修饰符 new 类型名this 参数列表 接口访问器 接口索引声明中的属性 类型和形式参数列表与类的索引声明的那些有相同的意义 接口索引声明的访问器与类索引声明的访问器相对应 可为 get set get set set get 即接口的索引可以是只读 只写或可读可写的 20 5 对接口成员的访问接口方法的调用和采用索引指示器访问的规则与类的情况也是相同的 如果底层成员的命名与继承而来的高层成员一致 那么底层成员将覆盖同名的高层成员 但是接口是支持多继承的 这样在多继承中如果两个父接口含有同名的成员就会产生二义性 这时就需要进行显式的声明 21 6 接口成员的完全有效名称使用接口成员也可采用其 完全有效名称 fullyqualifiedname 它是这样构成的 接口名加句点 再跟成员名 22 7 3 3接口的实现接口的声明仅仅给出了抽象方法 相当于程序开发早期的一组协议 具体地实现接口所规定的功能 则需某个类为接口中的抽象方法定义实在的方法体 即语句 称为实现这个接口 1 在类中实现接口接口可以通过类或结构来实现 其实现方法都是类似的 用类来实现接口时 接口的名称必须包含在类声明中的基类列表中 例如 classMyclass IMyInterface1 IMyInterface2 实现接口中声明的成员 23 实现某个接口的类必须要同时实现该接口的基接口的所有成员 例如 usingSystem interfaceISequence objectAdd interfaceIRing ISequence intInsert objectobj classRingSequence IRing publicobjectAdd publicintInsert objectobj 类RingSequence除了要实现接口IRing中的方法Insert外 还必须同时实现接口IRing基接口ISequence中的方法Add 24 一个类还可以实现多个接口 例如 usingSystem interfaceIControl voidPaint interfaceIDataBound voidBind intb publicclassControl IControl publicvoidPaint publicclassEditBox Control IControl IDataBound publicvoidPaint publicvoidBind intb 上例中 类EditBox从Control类继承 并同时实现了Icontrol和IdataBound接口 EditBox中的Paint方法来自Icontrol Bind方法来自IdataBound接口 25 2 显式接口成员执行体在某些情况下 类可能会使用完全有效名称来声明接口成员的实现 以这种方式实现的接口成员称为显式接口成员 例 publicclassEditBox Icontrol IComparable voidIcontrol Paint voidIComparable CompareTo intb 上面的代码中Icontrol Paint和Icomparable CompareTo就是显式接口成员执行体 26 例 usingSysteminterfaceICloneable objectClone interfaceIComparable intCompareTo objectother classListEntry ICloneable IComparable objectICloneable Clone intIComparable CompareTo objectother 上面的代码中Icloneable Clone和comparable CompareTo就是显式接口成员执行体 显式接口成员执行体不能使用任何访问修饰符 即不能加public等修饰符 27 之所以使用显示接口成员执行体 是因为在某些情况下不适合直接使用接口成员的名称 例 usingSystem interfaceRunner voidswim interfaceSwimmer voidswim classPerson Runner Swimmer voidRunner swim Console WriteLine run voidSwimmer swim Console WriteLine swim classTestInterface staticvoidMain Personp newPerson 这时就不能使用p swim Runnerr p r swim Swimmers p s swim 注意 当接口成员使用显示接口成员执行体方式来实现时 只能通过接口实例来访问 运行结果是 28 3 接口映射类必须为在基类列表中列出的所有接口的成员提供具体的实现 在类中定位接口成员的实现称之为接口映射 接口通过类实现 那么对于在一个接口中声明的每一个成员都应该对应着类的一个成员 这种对应关系就由接口映射来实现 29 如果一个类继承了两个或两个以上名称和参数类型都相同的接口成员 那么类中的一个成员就可能实现所有这些接口成员 interfaceIControl voidPaint interfaceIForm voidPaint classPage IControl IForm publicvoidPaint 这里接口Icontrol和Iform的方法Paint都映射到了类Page中的Paint方法 30 当然也可以分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新质生产力与企业出海
- 新媒体主播:新质生产力的新职业代表
- 新质生产力带来的发展机遇
- 圆轴扭转的概念及内力
- 2025年口腔颌面外科特殊手术处理模拟测试答案及解析
- 新质生产力的国内与国际视野
- 2025年神经外科常见手术操作技能评估答案及解析
- 2025年眼科青光眼手术前后护理注意事项模拟考试卷答案及解析
- 2025年法医学法医鉴定常见案例答案及解析
- 2025年骨科手术常见并发症的应急处理模拟考试卷答案及解析
- 汉字基本笔画与书写训练
- 数控铣工(四级)职业技能理论知识考试题库附答案(新版)
- 儿童常见疾病的防治 OK课件
- 软件工程导论课件(第六版)(张海潘编著)(1-13章)
- 中建硅墨烯保温板外墙保温施工方案
- 第三讲 神话学
- 山东大学核心期刊目录(文科)
- 中医基础理论-脏象学说
- ICU患者的早期活动
- GB/T 8566-2007信息技术软件生存周期过程
- GB/T 13452.2-2008色漆和清漆漆膜厚度的测定
评论
0/150
提交评论