5 面向对象编程:继承.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五讲 面向对象编程: 继承 主要内容 什么是继承 一个类可以继承另外一个类(密封sealed类除外),被继承的类称为父类(基类),继承的类称为子类(派生类)。 子类将获得基类除构造方法和析构方法以外的所有成员。私有成员也会被子类继承,但子类不能直接访问私有成员,子类可以通过调用公有或者保护方法间接对私有成员进行访问。 通过继承,程序可以实现对父类代码的复用。 什么是继承 【例1】子类BasePlusCommissionEmployee继承父类CommissionEmployee。 (1)父类CommissionEmployee代码: 什么是继承 (2)子类BasePlusCommissionEmployee代码: 什么是继承 (3)编写代码时,减少“复制+粘贴”。 1)方法之间的代码重复,可以考虑“将共性的代码定义到一个方法中”。 在子类重写父类方法时,使用“base.成员”格式,调用父类中已实现的功能。 子类的构造方法,使用“base()”格式调用父类的构造方法。 2)类之间的代码重复,可以考虑“继承”。 继承中的构造方法 继承中的构造方法 继承中的构造方法 继承中的方法重写 子类可以对从父类继承来的方法进行重写。 在父类中,用关键字virtual声明虚方法;在子类中用override重写父类的虚方法。 重写的方法与被重写的方法,必须有相同的方法名、参数列表、返回类型,以及访问权限。 override关键字隐式声明子类方法为virtual。 继承中的方法重写 【例4】使用virtual和override实现多层继承。 C#不支持多继承 C#禁止一个类继承多个父类,原因如下: 如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。 如果在一个子类继承的多个父类中拥有相同方法,子类中没有重写该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。 C#允许一个类实现多个接口,从而达到“多继承”的目的。 protected关键字 protected成员:限于本类与子类访问。 建议将父类的实例变量声明为private,而不是protected。 子类对象可以直接设置继承变量的值,则可能对变量赋予无效值; 使用protected实例变量,会增强父类和子类之间的耦合度。 sealed关键字 密封sealed类不能被继承,sealed方法不能被重写 静态类是sealed,不能被继承。 Object类 Object类是所有C#类的父类 Object类中常见的方法: public boolean Equals(Object obj) public int GetHashCode() protected void Finalize() public String ToString() Object类:ToString方法 ToString()方法的返回类型为string,描述当前对象的有关信息 当输出一个对象时,将自动调用对象的ToString()方法 可以根据需要在用户自定义类中重写ToString()方法 Object类:ToString方法 【例5】重写Person类的ToString方法。 * * 什么是继承 继承中的构造方法 继承中的方法重写 C#不支持多继承 protected关键字 sealed关键字 Object类 构造子类对象必须先调用父类的构造方法。 子类的构造方法中没有显式调用父类的构造方法,默认调用父类不带参数的构造方法。 子类的构造方法中,通过base(参数列表)调用父类的构造方法 父类的构造方法不能被子类继承。 【例2】请分析下面程序的执行结果。 答:创建对象时,先调用父类的构造方法,再调用子类的构造方法, 是一个由父类向子类逐步构建的过程。因此,输出结果为: 脊椎类动物的构造函数 哺乳动物类的构造函数 【例3】请分析下面代码编译出错的原因,并给出相应的解决办法。 答:如果子类的构造方法没有显式调用父类的构造方法,那么默 认调用父类的无参构造方法。因此,子类构造方法Mammal(int age) 会因找不到父类的无参构造方法Vertebrata()而编译出错。 解决办法: (1)为父类Vertebrata显式增加一个无参的构造方法。 (2)子类构造方法Mammal(int age)中通过base(0)调用父类的构造 方法Vertebr

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档