




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章继承与多态 2 回顾 类是具有相同属性和行为的一组对象的集合 对象是类的实例封装是隐藏对象实现细节的过程 以便不让用户看到实现的细节类可用Class来定义 类的变量和方法可被该类的实例访问 圆点符号用于访问对象的成员 构造函数在创建对象时初始化对象包可用package来申明 可用import来导入包 3 目标 理解继承及其特点运用JAVA程序实现继承理解多态及其特点设计运用JAVA程序实现多态掌握访问修饰符和方法修饰符 4 继承 父类 子类 5 继承的特点 6 extends关键字 extends关键字用于继承类 声明一个继承父类的类的通常形式如下 classsubclass nameextendssuperclass name 类体 没有extends 默认父类为Object只能有一个父类 即单继承子类继承父类的public和protected成员 注意 7 继承的优点 8 继承的JAVA实现 编写一个父类使用extends关键字 编写子类 classFather 父类privateintmoney floatweight height Stringhead Stringspeak Strings returns classSonextendsFather 子类Stringhand foot publicclassTestExtend publicstaticvoidmain Stringargs Sonboy newSon boy weight 120f boy height 1 8f boy head 一个头 boy hand 两只手 boy foot 两只脚 System out println 是儿子 System out println 我有 boy hand boy foot boy head 重 boy weight 高 boy height 9 子类构造方法2 1 要调用父类构造方法 使用关键字super 10 子类构造方法2 2 调用父类构造方法的语法为 super 或super 参数列表 super 方法始终指向调用类的父类 11 调用父类构造方法 关键字super的用法 classFictionAuthorextendsAuthor 存储作者的小说类型 Stringstorytype 子类构造方法 paramname传递至构造方法的参数 paramtype传递至构造方法的参数 FictionAuthor Stringname Stringtype super name storytype type System out println 从FictionAuthor类输出 System out println 小说类型为 storytype 调用父类构造方法 Author Stringstr name str System out println 从Author类输出 System out println 姓名为 name 12 多态性2 1 多态性是指 多种形式 它使用不同的实例而执行不同操作多态包括方法重写和方法重载 13 多态性2 2 父类 子类 绘制和移动三角形 子类 绘制和移动矩形 子类 绘制和移动五边形 14 方法重载2 1 方法重载 类中有多个具有相同名称的方法 15 方法重载2 2 publicclassDisplayNumber 无参数可显示 voiddisplay System out println 无参数可显示 paramnum传递至display方法的参数 paramnum1传递至display方法的参数 voiddisplay intnum intnum1 System out println 两个整数是 num num1 param型的count由display方法接收 voiddisplay doublecount System out println 在display double 方法内 count publicstaticvoidmain String arg intcount 25 DisplayNumberdispObj newDisplayNumber dispObj display dispObj display 10 20 不存在具有一个int型参数的方法 int型值自动转化为double型值 System out println 调用display double 方法 使用int变量 count dispObj display count dispObj display 25 5 16 方法重写2 1 17 方法重写2 2 父类和子类中具有相同名称和类型的方法 publicstaticvoidmain String arg RectanglerectObj newRectangle 10 15 rectObj getPerimeter RectanglesqObj newSquare 15 sqObj getPerimeter classSquareextendsRectangle Square intlen length len 计算周长 voidgetPerimeter System out println 正方形的周长为 4 length classRectangle intlength intwidth Rectangle intlen intwid length len width wid 计算矩形的周长 voidgetPerimeter System out println 矩形的周长为 2 length width 18 访问修饰符3 1 信息隐藏是OOP最重要的功能之一 也是使用访问修饰符的原因信息隐藏的原因包括 对任何实现细节所作的更改不会影响使用该类的代码防止用户意外删除数据此类易于使用 访问修饰符 19 访问修饰符3 2 20 访问修饰符3 3 访问修饰符可访问性 21 方法修饰符 22 static修饰符3 1 static修饰符修饰的方法叫静态方法目的使该方法独立于类的实例 使用类去访问 而不是类实例 所以也叫类方法 23 static修饰符3 2 调用静态方法的语法为 classname methodname 24 静态方法 与静态方法相关的几个要点 类的静态方法只能访问其他的静态成员静态方法没有this静态方法不能被覆盖为非静态方法 classStaticFun staticinti 10 intj staticvoidsetValue intx j x 出错System out println i 不能访问非静态变量j 可以访问静态变量i classStaticTest staticvoidtest classStaticexextendsStaticTest voidtest 出错 25 publicstaticvoidmain String arg 初始化变量 doubleinch 66 doublefeet InchesToFeet convert inches System out println inch 英寸为 feet 英尺 使用类名称调用static方法 publicstaticdoubleconvert doublein return in inches static修饰符3 3 26 final修饰符 27 final关键字 final类 final修饰符可应用于类 方法和变量 final在应用于类 方法和变量时意义是不同的 但本质是一样的 final表示不可改变 声明为final的类不能被继承 final类示例 java lang String finalclassTestFinal inti 7 intj 1 voidf classFurtherextendsTestFinal final类不能被继承 有继承就有进化 而final关键字代表进化终止 28 final方法 在方法声明中使用final关键字向编译器表明子类不能覆盖此方法 在声明类中 一个final方法只被实现一次 如果一个类为final类 那么它的所有方法都为隐式的final方法 classTestFinal finalvoidf classFurtherextendsTestFinal finalvoidf final方法不能被覆盖 29 final变量 一个变量可以声明为final 这样做的目的是阻止它的内容被修改 声明final变量后 只能被初始化一次 然后就不能对其值进行修改 一个final变量实质上是一个常量 classFinalDemo publicstaticvoidmain Stringargs finalintnoChange 20 noChange 30 final变量不能被修改 31 abstract修饰符3 1 由abstract修饰的方法叫抽象方法 由abstract修饰的类叫抽象类抽象方法必须声明在抽象类中抽象方法语法 abstracttypemethod name parameter list 声明抽象类语法 abstractclass 使用 父类中的某些抽象不包含任何逻辑 并需要在子类中重写 子类提供这种抽象方法的实现细节 32 抽象类 定义抽象类的目的是提供可由其子类共享的一般形式 子类可以根据自身需要扩展抽象类 抽象类不能实例化 抽象方法没有函数体 抽象方法必须在子类中给出具体实现 abstract修饰符可与类和方法一起使用 33 抽象类 在以下情况下 某个类将成为抽象类直接定义为abstract当一个类的一个或多个方法为抽象方法时 当该类为一个抽象类的子类 并且没有为所有抽象方法提供实现细节或方法主体时 当一个类实现一个接口 并且没有为所有抽象方法提供实现细节或方法主体时 34 abstract修饰符3 2 抽象类可以具有指向子类对象的对象引用 35 abstract修饰符3 3 抽象方法不具有任何实现代码 abstractclassShape protecteddoublelength protecteddoublewidth abstractdoublearea classSquareextendsShape 构造方法 paramnum传递至构造方法的参数 paramnum1传递至构造方法的参数 Square finaldoublenum finaldoublenum1 super num num1 计算正方形的面积 returndouble doublearea System out println 正方形的面积为 returnlength width 36 abstractclassAA abstractvoidcallme voidmetoo System out println InsideA smetoo method classBBextendsAA voidcallme System out println InsideB scallme method publicclassAAbstract publicstaticvoidmain Stringargs AAcc newBB cc callme cc metoo 37 接口 接口就是某个事物对外提供的一些功能的申明可以利用接口实现多态 同时接口也弥补了Java单一继承的弱点使用interface关键字定义接口一般使用接口声明方法或常量 接口中的方法只能是声明 不能是具体的实现 38 接口声明 从本质上讲 接口是一种特殊的抽象类 这种抽象类中只包含常量和方法的定义 而没有变量和方法的实现 通过接口使得处于不同层次 甚至互不相关的类可以具有相同的行为 接口其实就是方法定义和常量值的集合 它的优点主要体现在下面几个方面 1 通过接口可以实现不相关类的相同行为 而不需要考虑这些类之间的层次关系 2 通过接口可以指明多个类需要实现的方法 3 通过接口可以了解对象的交互界面 而不需了解对象所对应的类 接口把方法的定义和类的层次区分开来 通过它可以在运行时动态地定位所调用的方法 同时接口中可以实现 多重继承 且一个类可以实现多个接口 正是这些机制使得接口提供了比多重继承 如C 等语言 更简单 更灵活 而且更强劲的功能 39 接口声明 Java不支持多继承性 即一个类只能有一个父类 单继承性使得Java类层次简单 易于程序的管理 为了克服单继承的缺点 Java使用了接口 一个类可以实现多个接口 使用关键字interface来定义一个接口 接口的定义和类的定义很相似 分为接口声明和接口体两部分 1 接口声明我们曾使用class关键字来声明类 接口通过使用关键自interface来声明 完整的接口定义格式如下 public interfaceinterfaceName extendslistOfSuperInterface 其中public修饰符指明任意类均可以使用这个接口 缺省情况下 只有与该接口定义在同一个包中的类才可以访问这个接口 extends子句与类声明中的extends子句基本相同 不同的是一个接口可以有多个父接口 用逗号隔开 而一个类只能有一个父类 子接口继承父接口中所有的常量和方法 通常接口名称以able或ible结尾 表明接口能完成一定的行为 例如Runnable Serializable 40 接口声明 2 接口体接口体中包含常量定义和方法定义两部分 其中常量定义部分定义的常量均具有public static和final属性 其格式如下 returnTypemethodName paramlist 接口中只能进行方法的声明 而不提供方法的实现 所以 方法定义没有方法体 且用分号 结尾 在接口中声明的方法具有public和abstract属性 另外 如果在子接口中定义了和父接口同名的常量 则父接口中的常量被隐藏 例如 interfaceSummaryable finalintMAX 50 MAX具有public static final属性voidprintone floatx floatsum floatx floaty 上面这段程序可以以Summaryable java来保存 也可以写入其它Java程序中 41 接口声明 3 接口的使用一个类通过使用关键字implements声明自己使用 或实现 一个或多个接口 如果使用多个接口 用逗号隔开接口名 如classCalculateextendsComputerimplementsSummary Substractable 类Calculate使用了Summary和Substractable接口 继承了Computer类 如果一个类使用了某个接口 那么这个类必须实现该接口的所有方法 即为这些方法提供方法体 需要注意的如下 1 在类中实现接口的方法时 方法的名字 返回类型 参数个数及类型必须与接口中的完全一致 2 接口中的方法被默认是public 所以类在实现接口方法时 一定要用public来修饰 3 另外 如果接口的方法的返回类型如果不是void的 那么在类中实现该接口方法时 方法体至少要有一个return语句 如果是void型 类体除了两个大括号外 也可以没有任何语句 42 创建接口的步骤 定义方法的接口publicinterfacemyinterface publicvoidadd intx inty publicvoidvolume intx inty intz 定义程序使用的常量的接口publicinterfacemyconstants publicstaticfinaldoubleprice 1450 00 publicstaticfinalintcounter 5 定义一个接口 43 创建接口的步骤2 2 编译如下 javacmyinterface java用关键字implements实现接口 例如 classdemoimplementsmyinterface如果有一个以上接口被实现 则用逗号隔开接口名称 如下所示 classdemoimplementsMycalc Mycount 44 使用接口 例 使用多重接口的例子 MultInterfaces javainterfaceI1 abstractvoidtest inti interfaceI2 abstrac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人力资源管理师实战面试题集
- 2025年房地产销售经理面试指南与模拟题解析
- 2025年燃气工程中级知识系统梳理与预测题解析
- 电力冬季安全知识培训课件
- 2025年环境工程师高级专业模拟题及答案解析
- 2025年财务会计实操技巧与面试预测题
- 2025年初入金融行业必-备知识金融分析师面试模拟题集
- 2025年煤气工程专业知识与考试热点预测
- 电信线路设备基础知识培训课件
- 2025年外贸业务经理中级面试攻略与模拟题集全解
- 《半年度工作总结与规划》课件
- 《稻田养鸭技术》课件
- 污水处理设施运维服务投标方案(技术标)
- 投标物业管理服务方案
- 农业电力线路改造施工合同
- 个人优缺点剖析
- 选矿厂租赁合同范本
- DLT 593-2016 高压开关设备和控制设备
- 汽车电泳涂装技术及工艺详解
- 采购部三年规划
- 人教版九年级全一册英语Unit 1~14各单元重点语法知识点复习提纲
评论
0/150
提交评论