java程序设计大学教程

java程序设计大学教程

ID:36198778

大小:927.00 KB

页数:15页

时间:2019-05-07

java程序设计大学教程_第1页
java程序设计大学教程_第2页
java程序设计大学教程_第3页
java程序设计大学教程_第4页
java程序设计大学教程_第5页
资源描述:

《java程序设计大学教程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第四章面向对象程序设计面向对象的特点主要概括为抽象性、继承性、多态性和封装性。本章我们将站在面向对象程序设计原则和方法的高度,围绕这4个特点讲解面向对象程序设计(OOP)的基本方法。4.1原则和方法面向对象程序设计的重要原则有:分而治之原则封装原则接口原则信息隐藏原则一般性原则可扩展性原则抽象原则4.1原则和方法面向对象在程序设计中实现的方法:分解与封装继承与合成接口与实现服务与客户4.2继承对象的继承是一种在保持对象差异性的同时共享对象相似性的复用。它是源自类的泛化机制。这种抽象机制允许类之间共享代码,大大减少了代码长度并且使软件易于维护。对象通过继承,保证

2、了实现部分紧内聚和松耦合的良好特性4.2.1使用继承基类与派生类Java中派生类通过extends关键字继承基类,并通过super关键字访问基类的构造函数和方法。Java中所有的类都继承了Object类的toString方法,我们可以重写并覆盖toString方法,使之带有对象的具体信息,以便我们跟踪和调试对象。继承关系形成了树状的类层次结构。继承产生的派生类不能直接访问其基类的private成员,但所有其他基类成员通过继承成为派生类的成员后,保持它们原来的成员的可访问性,并可在派生类中使用。面积=length×width周长=2×(length+width)

3、Square需要重写并覆盖基类的calcPerimeter方法来计算周长。周长=4×lengthSquare可以继承基类Rectangle的calcArea方法来计算面积,无须另写代码图4‑2在这个UML类图中,Square继承了Rectangle,是Rectangle类的扩展示例程序4‑1Retangle类(Retangle.java)publicclassRetangle{publicRetangle(doublel,doublew){length=l;width=w;}publicdoublecalcPerimeter(){return2*(length

4、+width);}publicdoublecalcArea(){returnlength*width;}publicStringtoString(){return"长为"+length+"宽为"+width+"的长方形";}protecteddoublelength;privatedoublewidth;}示例程序4‑2Square类(Square.java)publicclassSquareextendsRetangle{publicSquare(doubleside){super(side,side);}publicdoublecalcPerimeter(

5、){returnlength*4;}publicStringtoString(){return"边长为"+length+"的正方形";}}4.2.1使用继承基类与派生类继承在果园系统中的使用4.2.2继承与合成面向对象程序设计中,通过合成或通过继承都可以在不同的环境中重用已有的设计和实现。但经验表明,除非所有继承的方法都有意义,否则还是应当优先考虑使用合成而不是继承。因为依赖于对象合成技术的设计有更好的重用性或更简单。4.3多态多态的意思是具有多种形态,它是面向对象程序设计的重要思想方法。多态在面向对象程序设计中意味着通过动态绑定原理,使用单个变量来引用不同类

6、的对象,自动调用引用对象类的对应方法。动态绑定机制,可以在运行期判定对象的类型,并调用其相应的方法。也就是说,编译器无需知道对象的类型,但方法的绑定和调用机制能够找出正确的方法体并加以调用。同名方法的覆盖(override)和重载(overload)是两种完全不同的机制。替代原则(substitutionprinciple):基类应该可以用其派生类代换。替代过程也是派生类向上转型的过程。向上转型是一种常用的安全的类型转换,通过向上转型可实现多态性。4.3.1多态与动态绑定派生类的对象具有多个类型动态绑定实现多态publicintgain(){intg=inpu

7、t*2;//收益是投入的两倍returng;}publicintgain(){//收益不变...}publicintgain(){//收益-200...}publicintgain(){//收益是投入的3倍intg=input*3;System.out.println(fruitName+"投入"+input+"净收益"+g);returng;}覆盖(override)fruits[i].gain();程序运行时动态确定实现的gain方法数组属性索引01234派生类类型TropicalFruitBerryTropicalFruitBerryCitrusFrui

8、t水果名称香蕉葡萄菠萝草莓橘子frui

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。