




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章面向对象程序设计,面向对象的特点主要概括为抽象性、继承性、多态性和封装性。本章我们将站在面向对象程序设计原则和方法的高度,围绕这4个特点讲解面向对象程序设计(OOP)的基本方法。,4.1原则和方法,面向对象程序设计的重要原则有:分而治之原则封装原则接口原则信息隐藏原则一般性原则可扩展性原则抽象原则,4.1原则和方法,面向对象在程序设计中实现的方法:分解与封装继承与合成接口与实现服务与客户,4.2继承,对象的继承是一种在保持对象差异性的同时共享对象相似性的复用。它是源自类的泛化机制。这种抽象机制允许类之间共享代码,大大减少了代码长度并且使软件易于维护。对象通过继承,保证了实现部分紧内聚和松耦合的良好特性,4.2.1使用继承,基类与派生类Java中派生类通过extends关键字继承基类,并通过super关键字访问基类的构造函数和方法。Java中所有的类都继承了Object类的toString方法,我们可以重写并覆盖toString方法,使之带有对象的具体信息,以便我们跟踪和调试对象。继承关系形成了树状的类层次结构。继承产生的派生类不能直接访问其基类的private成员,但所有其他基类成员通过继承成为派生类的成员后,保持它们原来的成员的可访问性,并可在派生类中使用。,面积=lengthwidth,周长=2(length+width),Square需要重写并覆盖基类的calcPerimeter方法来计算周长。周长=4length,Square可以继承基类Rectangle的calcArea方法来计算面积,无须另写代码,图42在这个UML类图中,Square继承了Rectangle,是Rectangle类的扩展,示例程序41Retangle类(Retangle.java)publicclassRetanglepublicRetangle(doublel,doublew)length=l;width=w;publicdoublecalcPerimeter()return2*(length+width);publicdoublecalcArea()returnlength*width;publicStringtoString()return长为+length+宽为+width+的长方形;protecteddoublelength;privatedoublewidth;,示例程序42Square类(Square.java)publicclassSquareextendsRetanglepublicSquare(doubleside)super(side,side);publicdoublecalcPerimeter()returnlength*4;publicStringtoString()return边长为+length+的正方形;,4.2.1使用继承,基类与派生类继承在果园系统中的使用,4.2.2继承与合成,面向对象程序设计中,通过合成或通过继承都可以在不同的环境中重用已有的设计和实现。但经验表明,除非所有继承的方法都有意义,否则还是应当优先考虑使用合成而不是继承。因为依赖于对象合成技术的设计有更好的重用性或更简单。,4.3多态,多态的意思是具有多种形态,它是面向对象程序设计的重要思想方法。多态在面向对象程序设计中意味着通过动态绑定原理,使用单个变量来引用不同类的对象,自动调用引用对象类的对应方法。动态绑定机制,可以在运行期判定对象的类型,并调用其相应的方法。也就是说,编译器无需知道对象的类型,但方法的绑定和调用机制能够找出正确的方法体并加以调用。同名方法的覆盖(override)和重载(overload)是两种完全不同的机制。替代原则(substitutionprinciple):基类应该可以用其派生类代换。替代过程也是派生类向上转型的过程。向上转型是一种常用的安全的类型转换,通过向上转型可实现多态性。,4.3.1多态与动态绑定,派生类的对象具有多个类型动态绑定实现多态,publicintgain()intg=input*2;/收益是投入的两倍returng;,覆盖(override),fruitsi.gain();程序运行时动态确定实现的gain方法,fruits0=newTropicalFruit(香蕉,1000);fruits1=newBerry(葡萄,2000);fruits2=newTropicalFruit(菠萝,2000);fruits3=newBerry(草莓,1000);fruits4=newCitrusFruit(橘子,1000);,我们可以像对待基类对象那样对待派生类对象,它们的共性表现在继承下来的同名类成员。所有继承于共同基类的派生类对象可以当做是这些基类的对象。FoodmyFood;FruitmyFruit;CitrusFruitorange;orange=newCitrusFruit(橘子,1000);/创建橘子对象myFood=orange();/相当于myFood=(Food)orange;myFood.eat();/调用的是CitrusFruit的eat方法:剥皮吃橘子myFruit=orange;/相当于myFruit=(Fruit)orange;myFruit.eat();/调用的还是CitrusFruit的eat方法:剥皮吃橘子,4.3.2方法的绑定,所谓的方法绑定(Binding)就是建立方法调用(MethodCall)和方法本体(MethodBody)之间的关联。如果方法是“早绑定”、“先期绑定”的,也就是在编译时编译器就能准确地判断应该调用的那个方法称为静态绑定方法。Java中这类方法包括private、static、final方法以及构造函数。如果方法是“晚绑定”、“后期绑定”的,也就是在运行时由虚拟机调用同该对象变量所指对象的实际类型相匹配的方法版本,动态决定的方法,称为动态绑定方法。Java中除了private、static、final方法以及构造函数外的其他方法都是动态绑定方法。Java语言中使用关键字final来定义常量。但是关键字final还有另外2个重要用途:一个是阻止类(final类)被继承,另一个是阻止方法(final方法)被覆盖(override)。抽象方法是一种没有实现的方法。定义有抽象方法的类我们称之为抽象类。抽象方法和抽象类都使用abstract关键字来标识。含有抽象方法的类必须定义为抽象类,但是没有抽象方法的类也可以定义为抽象类。但无论如何,抽象类都不能创建实例。,作业,Person,-姓名-年龄,+speak()+speakto(person),Man,Woman,在man和woman子类中重写speak方法,使之具有性别特征。,Personp;p=newMan();p.speak();P=newWoman()p.speak();,4.4接口,接口的概念是建立在封装的基础之上。在面向对象程序设计中,封装是指对象的使用者通过预先定义的接口关联到某一对象的服务和数据时,无需知道这些服务是如何实现的。因此接口在面向对象程序设计中有着重要的地位。在Java中,抽象类和接口(Interface)都是一种接口抽象机制,符合接口的特点。习惯上我们只把Java语法中的接口(Interface)作为接口的窄定义。该接口是一种类型,它定义了能被一个类实现的方法。,4.4.1接口的概念,接口是指一些方法特征的集合,它关心的是方法的特征定义(例如方法的名称、参数的类型及数量),而不是方法的具体实现。在Java中,抽象类和接口都是一种接口抽象机制,符合接口的特点。接口提供了一种抽象机制接口使即插即用变得可能接口针对抽象而不是针对实现,4.4.2Java接口,定义接口实现接口接口与多重继承,publicinterface接口名extends祖先接口名返回类型方法名(参数列表);.类型常量字段名=值;.,publicclass类名extends祖先类名implements接口名,其它接口名./类的实现代码.,下面代码通过实现Writeable接口和Eatable接口的Paper类代码,演示了多重继承的程序设计:publicclassPaperimplementsEatable,Writeablepublicvoideat()System.out.println(撕纸吃,+TASTELESS);publicvoidwrite()System.out.println(在纸上书写:);,4.4.3接口应用实例,使用接口的好处是便于系统的扩展、维护和重用。接口的使用使得
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年村级秘书考试模拟练习题集
- 2025年动作捕捉师面试问题及答案集
- 2025年职业规划必修课选调生财务管理方向考试预测题及解析
- 2025年教育心理学面试题及答案
- 2025年村级护路员桥梁面试高频题
- 2025年汽车维修技师技术水平认证试题及答案解析
- 2025年汽车改装师执业技能考核试题及答案解析
- 2025年美容护肤师专业知识考核试卷及答案解析
- 2025年客服安全操作题库含答案
- 2025年建筑装饰设计师执业能力测评题及答案解析
- 2024新苏教版一年级数学上册全册教案(共21课时)
- 船舶行业维修保养合同
- 影响宠物毛发质量的因素研究进展
- 网约车司机礼仪培训
- 山东省二年级下册数学期末考试试卷
- 交通事故现场勘查课件
- GB/T 44621-2024粮油检验GC/MS法测定3-氯丙醇脂肪酸酯和缩水甘油脂肪酸酯
- 餐饮加盟协议合同书
- 知道网课智慧《睡眠医学(广州医科大学)》测试答案
- 糖尿病医疗广告宣传指南
- T CEC站用低压交流电源系统剩余电流监测装置技术规范
评论
0/150
提交评论