JAVA类的继承和派生.ppt

上传人:max****ui 文档编号:6263188 上传时间:2020-02-21 格式:PPT 页数:21 大小:321.50KB
返回 下载 相关 举报
JAVA类的继承和派生.ppt_第1页
第1页 / 共21页
JAVA类的继承和派生.ppt_第2页
第2页 / 共21页
JAVA类的继承和派生.ppt_第3页
第3页 / 共21页
点击查看更多>>
资源描述
JAVA类的继承和派生 Inheritance extends derive 继承的概念和软件的重用性 继承是从已有的类中派生出新的类 新的类能吸收已有类的数据属性和行为 并能扩展新的能力 类和类之间的继承关系可以用UML符号表示如图5 1 父类又叫超类或基类 子类又叫派生类 父类是子类的一般化 子类是父类的特化 具体化 图5 1继承关系 super base parent child derived 继承的概念和软件的重用性 如表所示 列出了几个超类和子类的实际例子 图5 1继承关系 表继承例子 is a 关系 是类之间的继承的关系 has a 关系 代表类之间的组合 参见4 9节 继承的概念和软件的重用性 续 继承分为 单继承 指一个子类最多只能有一个父类 多继承 一个子类可有二个以上的父类 Java类只支持单继承 而接口支持多继承 Java多继承的功能则是通过接口方式来间接实现的 继承的概念和软件的重用性 续 object Win DialogWin 单继承 injava Class1 Class4 Class2 Class3 多继承 inC 单继承与多继承例子 继承的概念和软件的重用性 续 继承使软件的代码得到重用 提高系统效率 在继承关系中 子类通过吸收已有类的数据 属性 和方法 行为 并增加新功能或修改已有功能来创建新类 Object类 定义和实现了Java系统所需要的众多类的共同行为 它是所有类的根类 所有的类都是由这个类继承 扩充而来的 派生类的定义 派生类定义的一般格式为 类修饰符 class子类名extends父类名 成员变量定义 成员方法定义 派生类的定义中 用关键字extends来明确指出它所继承的超类 例5 1通过继承来定义派生类 派生类的定义 续 classAutomobile intNumber voidsetNumber intNum Number Num voidshowNumber System out println Automobilenumber Number 超类 派生类的定义 续 classTruckextendsAutomobile intcapacity voidsetCapacity inttruckCapacity capacity truckCapacity voidshowCapacity System out println TruckCapacity capacity 派生类 派生类的定义 续 classAutomobileExtends publicstaticvoidmain Stringargs Trucktc newTruck tc setNumber 8888 tc setCapacity 10 tc showNumber tc showCapacity 该程序运行的结果为 Automobilenumber 8888TruckCapacity 10 派生类使用从超类中继承的方法setNumber 派生类使用从超类中继承的方法showNumber 作用域和继承 第4章讨论了成员访问控制修饰符 public private package和protected 超类public的成员可以在超类中使用 也可以在子类使用 程序可以在任何地方访问public超类成员 超类的private成员仅在超类中使用 在子类中不能被访问 超类protected成员 可在子类和同一包内其他类被访问 超类package成员 可在同一包内其他类被访问 子类从超类中继承成员时 超类的所有public和protected成员在子类中 都保持它们原有的访问修饰符 例如 超类的public成员成为子类的public成员 超类的protected成员也会成为子类的protected成员 子类只能通过超类所提供的非private方法来访问超类的private成员 方法的重新定义 overriding 如果在子类中定义的某个方法与父类的某个方法有相同方法署名 方法头 则称子类重新定义 overriding 了父类的该方法 或称重写或覆盖 子类的对象调用这个方法时 将使用子类中定义的方法 对它而言 父类中定义的方法就 看不见 了 如要在子类的方法中要使用超类的这个被重写的方法 用 super 超类同名方法 例5 2方法的重写 Point类的设计 成员变量intx y成员方法setX int getX setY int getY toString Point Point intxValue intyValue Circle类的设计 成员变量x y 继承自Point类radius成员方法setX getX setY getY 继承自Point类setRadius getRadius getDiameter getCircumference toString 重写父类同名方法getArea Circle Circle intxValue intyValue doubleradiusValue 方法的重新定义 overriding 续 Point java文件的部分代码 publicStringtoString return x y Circle java文件的部分代码 publicStringtoString return Center super toString Radius radius 重写了超类Point类中的toString方法 通过super调用超类中的被重写的toString方法 继承下的构造函数和finalize方法 继承下的构造函数的调用次序 子类构造函数在执行自己的任务之前 将显式地 通过super引用 或隐式地 调用超类的默认构造函数或无参数构造函数 调用其直接超类的构造函数 类似地 如果超类派生于另一个类 则要求超类的构造函数调用层次结构中上一级类的构造函数 依此类推 在调用请求中 最先调用的构造函数总是Object类的构造函数 最后才会执行原有的子类构造函数 继承下的finalize方法的调用次序类层次结构中子类finalize方法调用应先于超类的finalize方法 直至最后调用Object超类的finalize方法 finalize方法的定义格式 voidfinalize 超类和子类的关系 一 我们再次使用点 圆继承层次来讨论超类与子类的关系 为了使圆类继承点类并能访问点类中的成员变量 我们可将点类中的x和y定义成protected的成员 这样我们就可以在点类的子类 圆类 中访问点类中的x和y变量了 下面的例5 4中 Circle2类通过继承Point2类 就可以在Circle2类中访问它的超类 Point2类 的protected和public成员了 例5 4使用protected数据的点 圆层次 超类和子类的关系 二 例5 4将超类 Point2类 的成员变量x y声明为protected 以便子类能够继承 但在使用protected成员变量时 会产生两个问题 子类可将非法值赋给变量 导致该变量处于非法状态 例如 如果将Circle2的成员变量radius声明为protected 则它的子类就能够将负值赋给radius变量 编写的子类Circle2方法更依赖于超类Point2实现 例如 如果由于某种原因将成员变量x和y的名称改为xCoordinate和yCoordinate 则子类直接引用这些超类成员变量的所有地方都必须进行相应地修改 为了使子类应依赖于超类服务 而不应依赖于超类实现 把超类中的成员变量声明为private 并在超类中定义访问这些private成员变量的public型的方法 例5 5把超类中的成员变量声明为private 在子类中使用从超类中继承过来的方法对这些私有成员变量进行访问 继承的程序设计举例 一 下面让我们来看一个具有3级继承层次的例子 这3级为点 圆 圆柱体 它们之间的继承关系如图5 3所示 例5 6继承的程序设计举例 图5 3三级继承层次 Point类的设计 成员变量 intx y成员方法 setX getX setY getY toString Point Point intxValue intyValue Circle类的设计 成员变量 doubleradius成员方法 setRadius getRadius getDiameter getCircumference getArea toStringCircle Circle intxValue intyValue doubleradiusValue Clinder类的设计 成员变量 doublehight成员方法 setHight getHight getArea toStringCylinder intxValue intyValue doubleradiusValue doubleheightValue
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!