




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章重载与多态 6 1类成员的覆盖6 2方法重载6 3抽象类和最终类6 4接口 本章要点 掌握在Java中覆盖的实现方式掌握在Java中重载的实现方式掌握抽象类的概念理解接口的概念 掌握它在Java中的实现 6 1类成员的覆盖 6 1 1覆盖的用法子类对继承自父类的类成员重新进行定义 就称为覆盖 它是一种很重要的多态形式 要进行覆盖 就是在子类中对需要覆盖的类成员以父类中相同的格式 再重新声明定义一次 这样就可以对继承下来的类成员进行功能的重新实现 从而达到程序设计的要求 publicclassMethodOverride publicstaticvoidmain String args SubClasss newSubClass s fun classSuperClass inti 1 publicvoidfun System out println Super System out println 父类的i i classSubClassextendsSuperClass inti 2 publicvoidfun System out println Sub System out println 子类的i i super fun 例6 1覆盖的用法 例6 1程序运行结果如图所示 6 1 2使用被覆盖的成员 1 域变量的隐藏子类重新定义一个与从父类那里继承来的属性变量完全相同的变量 称为域变量的隐藏 对于域变量的隐藏来说 父类定义的域变量在子类对象实例化时仍然分配一个存储空间 当子类执行继承自父类的操作时 处理的是继承自父类的变量 而当子类执行它自己定义的方法时 所操作的就是它自己定义的变量 而把继承自父类的变量 隐藏 起来 publicclassExtendsExam publicstaticvoidmain String args subclasse newsubclass System out println Sup getX 方法结果 e Sup getX System out println Sub getX 方法结果 e Sub getX classsuperclass publicintx 10 intSup getX return x classsubclassextendssuperclass privateintx 20 intSub getX return x 例6 2域变量的隐藏 例6 2程序运行结果如图所示 2 方法的覆盖 子类重新定义与父类同名的方法 实现时父类方法的覆盖 Overload 方法的覆盖与域的隐藏的不同之处在于 子类隐藏父类的域只是使之不可见 父类的同名域在子类对象中仍然占有自己的独立内存空间 而子类方法对父类同名方法的覆盖将清除父类方法占用的内存空间 从而使父类方法在子类对象中不复存在 方法的覆盖中需要注意的问题是 子类在重新定义父类已有的方法时 应保持与父类完全相同的方法头声明 即应与父类有完全相同的方法名 返回值和参数列表 否则就不是方法的覆盖 而是子类定义自己的与父类无关的方法 父类的方法未被覆盖 所以仍然存在 classsuperClass voidsuperPrint System out println ThisissuperClass classsubClassextendssuperClass voidsuperPrint System out println ThisissubClass publicclassmyInherit publicstaticvoidmain Stringargs subClasssubObject newsubClass subObject superPrint 子类对象调用子类的方法superClasssuperObject newsuperClass superObject superPrint 父类对象调用父类的方法 例6 3方法的覆盖 例6 4程序运行结果如图所示 3 super参考 相对this来说 super表示的是当前类的直接父类对象 是当前对象的直接父类对象的引用 所谓直接父类是相对于当前类的其他 祖先 类而言的 publicclassExtendsExam publicstaticvoidmain String args subclasse newsubclass e Sub printX classsuperclass publicintx 10 intSup getX return x voidSup printX System out println Sup printX 方法结果 Sup getX classsubclassextendssuperclass privateintx 20 intSub getX return super x 修改部分 voidSub printX System out println Sub getX 方法结果 Sup getX super Sup printX 例6 5super参考 例6 5程序运行结果如图所示 6 2方法重载 6 2 1方法的重载在Java中 同一个类中的两个或两个以上的方法可以有同一个名字 只要它们的参数声明不同即可 在这种情况下 该方法就被称为重载 overloaded 这个过程称为方法重载 methodoverloading 方法重载是Java实现多态性的一种方式 有两个规则适用于重载方法 调用语句的参数表必须有足够的不同 以至于允许区分出正确的方法被调用 方法的返回类型可以各不相同 但它不足以使返回类型变成唯一的差异 重载方法的参数表必须不同 publicclassOverloadExam publicstaticvoidprint Stringstr System out println String str publicstaticvoidprint inti System out println int i publicstaticvoidmain String args print 123 print 123 例6 6方法重载 例6 7程序运行结果如图所示 6 2 2构造函数的重载 例6 8构造函数的重载publicclassEmployee privateStringname privateintsalary publicEmployee Stringn ints name n salary s publicEmployee Stringn this n 0 publicEmployee this Unknown 6 3抽象类和最终类 6 3 1抽象类在Java中 凡是用abstract修饰符修饰的类称为抽象类 定义一个抽象类的格式如下 abstractclassClassName 类的主体部分 抽象类和一般的类不同之处在于 如果一个类中含有未实现的抽象方法 那么这个类就必须通过关键字abstract进行标记声明为抽象类 抽象类中可以包含抽象方法 但不是一定要包含抽象方法 它也可以包含非抽象方法和域变量 就像一般类一样 抽象类是没有具体对象的概念类 也就是说抽象类不能实例化为对象 抽象类必须被继承 子类为它们父类中的所有抽象方法提供实现 否则它们也是抽象类 abstractclassfatherClass abstractvoidabstractMethod voidprintMethod System out println fatherClassfunction classchildClassextendsfatherClass voidabstractMethod System out println childClassfunction publicclassmainClass publicstaticvoidmain Stringargs childClassobj newchildClass obj printMethod obj abstractMethod 例6 9抽象类 例6 9程序运行结果如图所示 6 3 2最终类 如果一个类被final修饰符所修饰和限定 说明这个类不可能有子类 这样的类就称为最终类 最终类不能被别的类继承 它的方法也不能被覆盖 被定义为final的类通常是一些有固定作用 用来完成某种标准功能的类 如Java系统定义好的用来实现网络功能的InetAddress Socket等类都是final类 6 4接口 6 4 1接口的定义Java中声明接口的语法如下 public interface接口名 extends父接口名列表 接口体 常量域声明 public static final 域类型域名 常量值 抽象方法声明 public abstract native 返回值方法名 参数列表 throw异常列表 在Java中接口是一种专门的类型 用interface关键字定义接口 接口中只能定义抽象方法 不能有方法体 一定是public修饰的 接口中可以定义变量 但实际上是staticfinal修饰的常量 接口中不能定义静态方法 定义接口可归纳为如下几点 publicinterfaceSup InterfaceExam publicstaticfinalintx inty publicvoidz publicabstractintgetz publicinterfaceSub InterfaceExamextendsSup InterfaceExam publicstaticfinalinta intb publicvoidc publicabstractintgetc classMyClassimplementsSub InterfaceExam Sup InterfaceExam publicvoidz publicintgetz return1 publicvoidc publicintgetc return5 例6 10定义接口 接口不能包含任何可以执行的方法 而抽象类可以 类可以实现多个接口 但只有一个父类 接口不是类分级结构的一部分 而没有联系的类可以执行相同的接口 接口与抽象类的区别 6 4 2接口的实现 一个类要实现接口时 请注意以下问题 在类的声明部分 用implements关键字声明该类将要实现哪些接口 如果实现某接口的类不是abstract抽象类 则在类的定义部分必须实现指定接口的所有抽象方法 如果实现某接口的的类是abstract的抽象类 则它可以不实现该接口所有的方法 但是对于这个抽象类任何一个非抽象的子类而言 它们父类所实现的接口中的所有抽象方法都必须有实在的方法体 个类在实现某接口的抽象方法时 必须使用完全相同方法头 如果所实现的方法与抽象方法有相同的方法名和不同的参数列表 则只是在重载一个新的方法 而不是实现已有的抽象方法 接口的抽象方法的访问限制符都已制定为public 所以类在实现方法时 必须显式地使用public修饰符 否则将被系统警告为缩小了接口中定义的方法的访问控制范围 interfaceA inta 1 interfaceB intb 2 publicabstractvoidpp interfaceMyInterfaceextendsA B 接口的继承abstractclassAbstractInterfaceExamimplementsA B 抽象类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年服装制版师、设计师技术及理论知识试题(附含答案)
- 2025全国政府采购法律法规百题知识竞赛试题及答案
- 摩擦力的秘密
- 摩托车行业知识培训课件
- 2024年细胞因子培训测试题及答案
- 2025年贵州省医疗三严三基理论考试试题及答案
- (2024)农民工权益保障考试试题及答案
- 2025二级建造师(机电类)继续教育试题及答案
- 摔鸡蛋课件教学课件
- 2025至2030年中国铝合金门窗市场竞争格局及行业投资前景预测报告
- 2025年陕西省综合评标评审专家库考试历年参考题库含答案详解(5套)
- 软件开发项目进展汇报
- 六安市辅警真题2024
- 2025贵州航空产业城集团股份有限公司旗下子公司贵州安立航空材料有限公司面向社会招聘61人笔试参考题库附带答案详解
- 摄影提成管理办法
- 人工智能赋能基础教育应用蓝皮书 2025
- 2025广东南粤银行资金运营中心招聘考前自测高频考点模拟试题带答案详解
- 2025年《资料员》考试题库附答案【模拟题】
- 磷石膏砌块项目可行性研究报告
- 现场调试合同协议书模板
- GB/T 22080-2025网络安全技术信息安全管理体系要求
评论
0/150
提交评论