




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一阶段Java核心及基础应用 Java面向对象思想及核心 杨振宇2011 11 Java面向对象思想及核心 一 接口 抽象类二 内部类 匿名类和包三 字符串类四 异常处理五 JDK核心API和高级类六 图形界面编程七 IO输入输出流八 多线程九 集合框架后续 网络编程 JDBC 前期基础 Java基础 面向对象编程 类和继承 6 1 1类的定义 人 张三 李四 电话机 茶具 沙发 一 接口和抽象类 1 接口的概念2 接口的实现3 抽象类和抽象方法4 接口回调5 接口作参数6 类的多态 Java语言中 一个子类只可以继承一个直接父类 这被称为单一继承 使用单一继承虽然各个类之间的层次关系清楚 可读性强 但是在处理一些复杂问题时 则会显得功能不够强大 因此 Java语言提供了接口功能 来实现多重继承 接口是用来组织类内容的一种程序结构 一个类可以有多个接口 在Java语言中 一个对象的行为一般是与其具体的实现细节分开的 这种对象行为与行为的具体实现细节分离的设计方法称为抽象 1 接口的概念 在Java语言中 使用接口来定义某个类所支持的操作 因此 在接口中 所有的方法均为抽象方法 接口定义的仅仅是实现某一特定功能的接口和其规范 而并没有真正实现这个功能 这个功能的真正实现是在应用这个接口的类中完成的 要由类来具体定义接口中各个抽象方法的语句体 例如 如果我们定义了一个名为Calculate的接口 其中有add 和minus 两个抽象方法 那么任何实现该接口的类都必须支持其中的add 和minus 方法 也就是说在类中具体描述这两个方法的语句体内容 1 接口的概念 创建接口的形式如下 publicinterface接口名 publicstaticfinal类型变量名 常量数据 publicabstract方法类型方法名 参数 其中 关键字interface是用来定义接口的 接口名要符合Java对标识符的规定 public是接口的唯一访问控制修饰符 如果没有使用任何访问控制修饰符 则表示只有与该接口定义在同一个包中的类才可以访问这个接口 接口中的变量只能是常量形式的变量 方法也必须是抽象方法 因为接口中的方法均是使用修饰符public和关键字abstract修饰的 所以在书写时可以省略这两个单词 2 接口的实现 例如 在下面的接口程序中 我们定义了2个常量和3个抽象方法 interfaceCalculate inti 10 Strings 计算结果如下 booleanisZhishu intadd inta intb doubleminus inta intb 创建接口仅仅给出了抽象方法 如果要具体的实现接口所定义的方法 则需要某个类为接口中的每个抽象方法定义具体的操作来实现这个接口的功能 2 接口的实现 实现接口的形式为 publicclass类名implements接口名1 接口名2 语句体 其中 使用关键字implements来定义这个类的接口 一个类可以实现多个接口 使用逗号将它们分隔开 注意三点 1 如果实现某个接口的类不是使用关键字abstract修饰的抽象类 则在类中必须定义实现接口所有抽象方法的具体实例方法 并且该方法必须与接口中的方法定义完全一致 也就是说具有完全相同的参数个数和类型 以及方法的返回类型 2 接口的实现 2 如果实现某个接口的类是使用关键字abstract修饰的抽象类 则它可以不实现该接口所有的方法 但是在这个抽象类的任何一个非抽象子类中 必须具体定义其父类所实现的接口中的所有抽象方法 另外 可以定义一个新的接口 用extend关键字去继承一个已有的接口 3 接口的抽象方法的访问控制符均为public 所以类在实现这些抽象方法时 必须使用public修饰符 例如 publicinterfaceNum intnum 10 publicvoidprintNum publicclassTestNumimplementsNum publicvoidprintNum System out println Num Num 2 接口的实现 抽象类的意义与接口基本一样 都是为了更好的控制类的抽象结构 定义抽象类的形式为 abstractclass类名 语句体 1 抽象类中的方法可以是实例方法 也可以抽象方法 但是如果一个类含有抽象方法 则此类必须为抽象类 而其如果一个类是抽象类的子类且其不是抽象类 则该子类必须实现父类的所有抽象方法 2 抽象方法定义了一个抽象类的功能 但是没有给出该功能的具体实现过程 定义抽象方法的形式为 abstract方法类型方法名 参数 3 抽象方法不能使用修饰符static和final修饰 3 抽象类和抽象方法 接口与抽象类有相似之处 但也有区别 下表反映了两者的区别 3 抽象类和抽象方法 案例接口的实现与运用 目的 1 学习如何定义接口 2 掌握接口的实现方式 3 使用实现了接口的类 4 理解接口与抽象类的区别 任务 设计和实现一个Soundable接口 该接口具有发声功能 同时还能够调节声音大小 Soundable接口的这些功能将会由3种声音设备来具体实现 它们分别是收音机Radio 随身听Walkman和手机Mobilephone 最后还要设计一个应用程序类来使用这些实现了Soundable接口的声音设备类 程序运行时 先询问用户想听哪种设备 然后程序就会按照该设备的工作方式来发出声音 程序运行的效果如图所示 思考 1 请问在InterfaceTest类中 SoundDevice 数组是什么类型的 该数组为什么能存放3种不同的对象Radio Walkman和Mobilephone呢 2 在程序中 Soundable是一个接口 那么该接口是否可以被实例化呢 请在InterfaceTest类的main 方法中加入以下语句试验一下 并分析结果 案例接口的实现与运用 3 现在假定要为程序增加一个闹钟类Clock 该类也实现Soundable接口 能够发出滴答声 请将以下的Clock类加入到InterfaceTest java程序中 并在InterfaceTest类的main 方法中加入SoundDevice 3 newClock 语句 修改之后 重新编译InterfaceTest java并运行它 观察结果 案例接口的实现与运用 4 在第 3 小题中由于新加入的Clock类仅仅实现了Soundable接口的stopSound 和playSound 方法 而increaseVolume 和decreaseVolume 方法没有实现 因此它实质上是一个抽象类 而抽象类是不能实例化的 所以导致编译错误 但是按照常理 闹钟的滴答声确实是不可以增大或减小的 那么如何解决这个问题呢 现在请在Clock类中加入下面两个含 空方法体的方法实现 再编译运行程序 看看会有什么变化 案例接口的实现与运用 5 现在请模仿本实验的程序设计出一个自己的接口程序 要求先设计一个moveable可移动接口 然后分别设计3个类 即汽车Car 轮船Ship 飞机Aircraft来实现该接口 最后设计一个应用程序来使用它们 4 接口回调 接口回调是指 可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中 那么该接口变量就可以调用被类实现的接口中的方法 实际上 当接口变量调用被类实现的接口中的方法时 就是通知相应的对象调用接口的方法 实例运行 5 接口作参数 一个方法的参数是接口类型 就可以将任何实现该接口的类的实例的引用传递给该接口参数 接口参数就可以回调类实现的接口方法 实例运行 6 类的多态 1 多态的概念2 动态绑定 多态是指程序的多种表现形式 除了方法的重载 子类对父类方法的覆盖或者子类对抽象父类中的抽象方法的具体定义也是类多态的一种表现形式 所谓覆盖 是在定义子类的方法时 使用与其父类中相同的名称和参数 在执行程序时 将执行子类的方法 而覆盖父类的方法 1 多态的概念 例如 publicdoublesum doublea doubleb returna b 在子类中有方法名和参数都完全相同 但是语句体内容不同的方法publicdoublesum doublea doubleb returna b 当编写应用程序 通过子类对象调用sum 方法时 只会执行子类中求积的方法 而不会执行父类中求和的方法 1 多态的概念 利用多态性 可以将一个方法的形参设为超类类型 而将传递给该方法的实参既可以是超类对象也可以是子类对象 具体执行时 Java会自动根据实际对象所属的类型来选择方法执行 因此多态性增强了编程的灵活性和系统的维护性和可扩展性 1 多态的概念 2 动态绑定 在Java中超类往往定义出一个通用的方法 而其不同的实现则由它的不同的子类来完成 当通过对象来调用这样一个方法时 Java会依据运行时该对象的实际类型来决定用方法的哪一个版本来执行 也即动态地绑定一个方法来执行 动态绑定的前提是 Java允许将子类对象赋给超类类型的变量 每个子类对象同时也是其超类的对象 案例多态性与动态绑定 目的 1 掌握多态性在继承中的运用 2 理解动态绑定的含义 3 学会使用抽象类 4 了解成员变量的隐藏 任务 请设计3个类 分别是学生类Student 本科生类Undergraduate 研究生类Postgraduate 其中Student类是一个抽象类 它包含一些基本的学生信息如姓名 所学课程 课程成绩等 而Undergraduate类和Postgraduate都是Student类的子类 它们之间的主要差别是计算课程成绩等级的方法有所不同 研究生的标准要比本科生的标准高一些 如下表所示 假设某班级里既有本科生也有研究生 请编写程序统计出全班学生的成绩等级并显示出来 此题关键是设计一个学生数组 既能存放本科生对象 又能存放研究生对象 程序的运行效果如图所示 案例多态性与动态绑定 思考 1 在Polymorphism类中有一个循环语句用来计算每个学生的成绩等级for inti 0 I 5 i students i calculateGrade 请问这里的calculateGrade 方法是按照研究生的标准还是按照本科生的标准来计算的 2 请问在程序Polymorphism类中 哪些语句体现了子类的对象可以赋值给父类的引用变量 案例多态性与动态绑定 3 现在请在程序Polymorphisrn类的main 方法中添加如下的语句Studentst newStudent 李明 此时编译是否会报错 如有错误 请解释原因 4 在程序中要判断student i 中存放的究竟是Undergraduate对象还是Postgraduate对象 只需要调用student i getType 方法即可 然而Java提供了一个instanceof运算也可以完成这一任务 它能判断出一个对象所属的类 请将以下代码添加到程序中进行测试 案例多态性与动态绑定 5 现在请模仿本程序 新增一个高中生类 它计算成绩等级的标准采用如下方法 然后在主程序中测试并使用它 案例多态性与动态绑定 使用接口要点如果一个类使用了某个接口 那么这个类必须实该接口的所有方法 即为这些方法提供方法体 在类中实现接口的方法时 方法的名字 返回类参数个数及类型必须与接口中的完全一致 接口中的方法被默认是public的 所以类在实现口方法时 一定要用public来修饰 如果接口方法名有返回类型 那么在类中实现该口方法时 方法体至少要有一个return语句 如果接口方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB53-T 1397-2025 洋桔梗切花生产技术规程
- 智能消防栓系统项目可行性研究报告
- 年产9900吨精密光机部件项目可行性研究报告
- 年产680套液氮泵车项目可行性研究报告
- 艺人经纪合同
- 防控知识技能培训表课件
- 游戏产业市场逐涨幅分析报告研究
- 腾阳矿业监理合同2篇
- 发起人股份合作协议书5篇
- 服务费协议范本标准版6篇
- 安防监控设备维护保养手册
- 医疗美容手术管理制度
- 城市轨道交通工程测量技术培训课件
- 2025年数据分析师初级考试试题及答案
- 【KAWO科握】2025年中国社交媒体平台指南报告
- 《面诊与面诊图谱》课件
- 资质借用合同 协议书
- 货物仓储托管合同协议
- 2025至2030中国汽车前大灯及后装市场经营策略及投融资趋势研究报告
- 中心静脉导管并发症处理
- 铁路货运信息化的国际比较与借鉴
评论
0/150
提交评论