已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 面向对象的编程技术 1 面向对象的编程技术 内容: 设计对象 继承性 多态性 2 设计对象 3.1 学习完本节后,你将能够: 在对象中封装信息 使用属性管理对封装数据的访问 3 封 装 性 3.1.2 将类的某些数据和操作这些数据的代码隐藏起来 ,这就是封装 封装的好处: 可以隐藏类实现的细节 简化用户的使用 易于软件的更新、修订、维护。可以修改内部实现,但不影响用 户的使用 4 访 问 修 饰 符 使用访问修饰符,可以定义应用程序中类成员的作用域( 可见性) 声明声明定义定义 public不限制访问 private只能从包含的类中访问 protected包含的类或继承的子类可以访问 protected包含的类、继承的子类可以访问 5 属 性 3.1.3 属性是“聪明”的字段,“特殊”的方法 定义属性类似于定义一个方法,但使用属性时如 同使用一个字段 class Cat public string name ; public int age; static void Main() Cat cat1 = new Cat(); cat1.age = -13; /错误 6 创 建 属 性 3.1.3 语法: public|protected 数据类型 属性名 get /get访问器,获取属性的代码 set /set访问器,设置属性的代码 7 创 建 属 性 3.1.3 示例: public class Cat private int age; public int Age get return age; set if (value=20) 报告出错 else age = value; 8 使 用 属 性 3.1.3 示例: Cat cat1 = new Cat(); cat1.Age = 1; /使用Age属性的set访问器 int n = Cat.Age; /使用Age属性的get访问器 cat1.Age = 100; /收到错误消息 9 属 性 3.1.3 如果只提供了get ,没有set ,这样的属性为只读 属性 如果只提供了set ,没有get ,只写属性 优点: 属性在使用时类似于类的字段,简单 属性在实现时类似于方法,可以编写代码控制用户对数据的存、取 ,增加安全性检查 可以设置只读或只写属性 10 练 习 10 分钟 编写和使用属性 3.1.4 11 面向对象的编程技术 内容: 设计对象 继承性 多态性 12 继 承 性 3.2 定义基类 创建派生类 创建密封类 13 继 承 3.2.1 “A” is a kind of “B”,猫是一只动物,阿土仔是一个人 “A” is a kind of “B”,说明B是A的一个父类,A是B的子类(基 类/派生类) 子类无条件的接收父类具有的特性,包括属性和方法,这就叫做 继承 继承允许把公共的属性和方法包含在基类中得到重用,此外,子 类还可以添加自己的特性 利用继承,可以以现有的类为基础,创建出新的类,实现了代码 的重用 14 继 承 3.2.1 继承描述了“是什么种类” ( is a kind of)的关系 派生类从基类继承属性和 方法,实现了代码重用 派生类变得更专门化 在C#中只支持单一继承, 即每个子类只能有一个父 类 父类 子类 动物 大象猫 15 派 生 类 3.2.2 示例: 动物园需要管理3种动物,羚羊,狮子,大象 public class Antelope public bool IsSleeping; public void Sleep() public void Eat() public class Lion public bool IsSleeping; public void Sleep() public void Eat() public void StalkPrey() public class Elephant public bool IsSleeping; public void Sleep() public void Eat() public int CarrayCapacity; public class Animal public bool IsSleeping; public void Sleep() public void Eat() public class Antelope: Animal public class Lion : Animal public void StalkPrey() public class Elephant:Animal public int CarrayCapacity; 16 派 生 类 3.2.2 示例: public class Animal protected bool IsSleeping; public void Sleep() public void Eat() public class Lion : Animal public void StalkPrey() . Lion adoptedLion = new Lion(); adoptedLion.StalkPrey(); adoptedLion.Eat(); 17 base 关键字 3.2.3 base 指代一个对象的父类/基 类 当子类中的成员与父类成员重 名是,父类的成员被隐藏 base 的作用: 点取父类中被子类隐藏了的成员 变量 点取被子类覆盖了的方法 作为方法名表示父类的构造函数 public Animal public void method1() public class Lion : Animal /将父类的同名方法隐藏 public void method1() public Lion() this.method1(); base.method1(); 18 密 封 类 3.2.4 使用sealed关键字声明密封类 密封类不允许其他类继承该类 密封的方法不允许被覆盖 如果你的类不希望被别人继承、修改,为安全起见,把它们定义为 sealed吧! 和java中的final相似 public sealed class MyClass / class members 19 练 习 10 分钟 创建派生类 3.2.5 20 面向对象的编程技术 内容: 设计对象 继承性 多态性 21 多 态 3.3 通过在基类中使用虚方法来实现多态性 创建和使用抽象类 22 多 态 性 3.3.1 具有多种不同的形态,这种能力称为多态性 子类继承了父类的特性,但子类在某些细节上各不相同,多种多样, 如何做到这一点呢? Animal 对象 Elephant Cat Mouse 行为 Eat Grass Eat Mouse Eat Cheese 被调用的 方法 Eat () Eat () Eat () 23 编 写 虚 方 法 3.3.2 如果希望某个方法的实现能够在子类中进一步得到改进,那么将方法 定义为虚方法 使用virtual关键字定义虚方法 这样子类就可以改进从父类继承下来的Eat方法了 public class Animal public virtual void Eat() Console.WriteLine(“Eat something“); 24 编 写 虚 方 法 3.3.2 如果希望改进父类的某个虚方法,使用override关键字覆盖父类的方 法,提供自己的实现就可以了 当覆盖虚方法时,覆盖的方法必须与被覆盖的方法具有相同的方法签 名 这样子类就可以有与众不同的Eat方法了 public class Cat : Animal public override void Eat() Console.WriteLine(“Eat mouse !“); 25 虚 方 法 的调 用 3.3.2 当调用某个虚方法时,运行时会根据具体对象的类型,动态决定调用 哪个方法。 public class Animal public virtual void Eat() Console.WriteLine(“Eat something“); public class Cat : Animal public override void Eat() Console.WriteLine(“Eat mouse !“); Animal myCat = new Cat(); myCat.Eat(); / 输出:Eat mouse ! 26 多 态 的 实 现 3.3.2 动物饲养员 public class AnimalTrainer public void FeedAnimal(Animal a) a.Eat(); static void Main() Elephant myElephant = new Elephant(); Cat myCat = new Cat(); Mouse myMouse = new Mouse(); AnimalTrainer marry = new AnimalTrainer(); marry.FeedAnimal(myElephant); /Eat Grass marry.FeedAnimal(myCat); /Eat Mouse marry.FeedAnimal(myMouse); /Eat Cheese 27 抽象方法 只有方法声明,但没有方法实现,是一个空方法 抽象的方法隐式为虚方法,必须被覆盖 抽象类: 包含了抽象方法的类必须声明为抽象类 只能被继承,但不能创建一个抽象类的对象实例 使用abstract关键字定义抽象类和抽象方法 如果你的某个类的方法不知道该如何实现,实现的细节是由子类 决定的,那么把它定义成abstract吧! 抽象方法和抽象类 3.3.3 28 class Shape public string name ; public double GetArea() ? ? ? 抽象方法和抽象类 3.3.3 思考题: 为什么使用抽象方法 定义一个shape类,表示各种几何图形,方法getArea( )用来计算图 形的面积,该如何实现这个方法呢? 三角形,正方形, 圆形,不同的 几何图形面积的计 算公式不同,显然 在这里没法实现 29 class 圆形 :Shape public override double GetArea ( ) area = R2 ; class 三角形 :Shape public override double GetArea ( ) area = (底 * 高)/2 ; abstract class Shape public abstract double GetArea();/没有方法体 抽象方法和抽象类 3.3.3 解决办法:定义为abstract,让各个子类自己去实现吧。 30 练 习 10 分钟 使用多态性 3.3.4 31 面向对象编程优点 3.1.1 简易性 对象反映了现实世界的元素,使程序更容易设计 封装性 隐藏了重要的数据和实现细节,易于代码维护,更安全 继承性 实现了代码重用,提高了开发效率 多态性 实现了现实世界对象的多样性和差异性 聚合性 对象
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024丙丁双方就服务器租赁及维护合同
- 2024年度医药产品研发与生产承包合同
- 2024年度船舶租赁合同
- 2024年度股权投资投资人与目标公司股权转让合同
- 2024年度KTV装修设计服务合同
- 2024年度电商平台服务合同及违约责任分析
- 2024年度新材料研发与转让合同
- 2024年度版权购买合同版权权属及购买价格
- 2024年度技术支持服务合同
- 2024年加油站车辆清洗服务合同
- 医院传染病质控自查表
- 广告机质量检测报告(共6页)
- 8 煤矿安全监测监控系统PPT课件
- 中国 美国 日本水洗标志对比
- 新产品试制流程管理办法
- 通用横版企业报价单模板
- 潜油泵及潜油泵加油机讲义
- 物业服务公司各岗位规范用语
- 医患沟通内容要求记录模板(入院、入院三日、术前、术后、出院)
- 航海学天文定位第四篇第6章天文定位
- 浅谈深度教学中小学数学U型学习模式
评论
0/150
提交评论