全文预览已结束
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件设计开发 计算机光盘软件与应用 c o m p u t e r c d s o f t w a r e a n d a p p l i c a t i o n s 2 0 1 0年第 l 2 期 j a v a 中方法重写与方法重载的比较 王 丽丽 徐州空军学院 江苏徐州2 2 1 0 0 0 摘要 在面向对象程序设计语言的应用中 j a v a中的方法重写与方法重栽在应用中会存在很 多问题 这些概念很容 易混淆 本文就这些概念给出了一些详细的论述 在理论和应用中来介绍方法重写与方法重栽的区别 关键词 继承 父类 子类 方法重写 方法重栽 中图分类号 t p 3 1 4 文献标识码 a 文章鳊号 1 0 0 7 9 5 9 9 2 0 1 0 1 2 0 1 2 8 0 2 th e co mp a r i s o n o f m e t h o d ov e r l o a d i n g a n d ov e r r i d i n g i n j a v a wa n g l i li x u z h o u a i r f o r c e c o l l e g e x u z h o u 2 2 1 0 0 0 c h i n a a b s t r a c t i n t h e a p p l i c a t i o n o f o b j e c t o r i e n t e d p r o g r a m mi n g l a n g u a g e t h e me t h o d o v e r r i d e a n d m e tho d o v e rl o a d i n g o f j a v a wi l l h a v e ma n y p r o b l e ms in the a p p l i c a t i o n t h e s e c o n c ept s a l e e a s i l y c o n f u s e d t h i s a r t i c l e g i v e s the s e c o n c e p t s in d e t a i l s i n the the o r y a n d a p p lic a t i o n o fme thod s t o i n t r o du c e the d i ffe r e n c e be t we e n me tho d o ve r r i de an d me t h o d o v e r l o a d i n g ke y wo r fl s i n h e ri t a n c e p a r e n t s u b c l a s s me thod o v e r r i d e m e tho d o v e r l o a d i n g 继承和多态都是面向对象程序设计的特点 使用继承可以在 一 个父类的基础上再创建一个子类 这个子类不但拥有父类 已有 的属性和方法 还可 以创建属于 自己的属性和方法 由于子类和 父类之间的关系 从而引出了方法重写和方法重载的问题 方法 重写及方法重载在继承和多态性方面的应用中会存在很多问题 这些概念很容易混淆 掌握重写和重载的区别对学会使用多态的 方式编写程序 提高程序的可维护性奠定了基础 一 方法重写 0 v e r r i d i n g 如何定义重写 在 j a v a 程序中 类的继承关系可以产生一个 子类 子类继承父类 它具备了父类所有的特征 继承 了父类所 有的方法和变量 子类可以定义新的特征 当子类需要修改父类 的一些方法进行扩展 增大功能 程序设计者常常把这样的一种 操作方法称为重写 也叫称为覆写或覆盖 重写体现了 j a v a优越 性 重写是建立在继承关系上 它使语言结构更加丰富 在 j a v a 中的继承中 子类既可以隐藏和访问父类的方法 也可 以覆盖继 承父类的方法 在 j a v a中覆盖继承父类的方法就是通过方法的重 写来实现的 所谓方法的重写是指子类中的方法与父类中继承的方法有完 全相同的返回值类型 方法名 参数个数以及参数类型 这样 就可以实现对父类方法的覆盖 例如 下面的代码实现 了方法的 重写 c l a s s p e r s o n 定义父类 f p u b l i c v o i d p r i n t 父类中的方法 s y s t e m o u t p r i n t l n 父类 p e r s o n的p r i n t 方法 1 c l a s s s t u d e n t e x t e n d s p e r s o n 定义子类继承 p e r s o n 类 p u b l i c v o i d p r i n t f 方法的重写 s y s t e m o u t p r i n t l n 子类 s t u d e n t的 p r i n t 方法 p u bli c c l a ss 0v e r ri d e e x a mp l e o1 p u b l i c s t a t i c v o i d m a i n s t r i n g a r g s s t u d e n t s n e w s t u d e n t s p r i n t 运行结果 子类 s t u d e n t的 p r i n t 方法 可以看出 当子类重写 了父类中的 p r i n t 方法后 使用 s 调用的是子类的 p r i n t 方法 父类中的 p r i n t 方法被覆盖 了 也就是说 如果现在子类将父类中的方法重写了 调用的时 候肯定是调用被重写过的方法 那么如果现在一定要调用父类中 的方法该怎么办呢 此时 通过使用 s u p e r关键就可以实现这个 功能 s u p e r关键字可以从子类访问父类中的内容 如果要访 问 被重写过的方法 使用 s u p e r 方法名 参数列表 的形式调用 例 如 c l as s p e rs o n p u b l i c v o i d p r i n t s y s t e m o u t p r i n t l n 父类 p e r s o n的 p r i n t 方法 c l as s st ud e nt e x t e nd s pe rs o n p u b l i c v o i d p r i n t s u p e r p r i n t 访问父类中被子类覆写过的方法 s y s t e m o u t p r i n t l n 子类 s t u d e n t的 p r i n t 方法 p u bl i c c l as s o v e r ri d e e xa mp l e 02 p u b l i c s t a t i c v o i d m a i n s t r i n g a r g s s t u d e n t s n e w s t u d e n t s p r i n t j 运行结果 父类 p e r s o n的 p r i n t方法 子类 s t u d e n t的 p r i n t 方法 如果要使用 s u p e r关键字不一定非要在方法重写之后使用 也可以明确地表示某个方法是从父类中继承而来的 使用 s u p e r 只是更加明确 的说 要从父类中查找 就不在子类查找了 二 重写规则 在重写方法时 需要遵循以下的规则 一 父类方法的参数列表必须完全与被子类重写的方法的 参数列表相同 否则不能称其为重写而是重载 二 父类的返回类型必须与被子类重写的方法返回类型相 同 否则不能称其为重写而是重载 三 j a v a中规定 被子类重写的方法不能拥有比父类方法 更 加 严 格 的 访 问 权 限 访 问 权 限 大 小 关 系 为 2 0 1 0 年第 1 2 期 计算机光盘软件与应用 c o m p u t e r c d s o f t w a r e a n d a p p l i c a t i o n s 软件设计开发 pri v at e d e f a ul t p ro t e ct e d p ub 1 c 编写过 j a v a 程序的人就知道 父类中的方法并不是在任何情 况下都可以重写的 当父类中方法的访问权限修饰符为 p r i v a t e 时 该方法只能被 自己的类访 问 不能被外部的类访问 在子类 是不能被重写的 如果定义父类的方法为 p u b l i c 在子类定义为 p r i v a t e 程序运行时就会报错 例如 c l a s s pe r s on p u b l i c v o i d p r i n t p u b l i c 访 问权限 s y s t e m o u t p r i n t l n 父类 p e r s o n的 p r i n t 方法 c l a ss s t e d e nt e xt e n d s pe rs o n p r i v a t e v o i d p r i n t 重写方法降低了访问权限 错 误 s y s t e m o u t p r i n t l n 子类 s t u d e n t的p r i n t 方法 四 由于父类的访问权限修饰符的限制一定要大于被子类 重写方法的访问权限修饰符 而 p r i v a t e权限最小 所以如果某 一 个方法在父类中的访问权限是 p r i v a t e 那么就不能在子类中 对其进行重写 如果重新定义 也只是定义了一个新的方法 不 会达到重写的效果 五 在继承过程中如果父类当中的方法抛出异常 那么在 子类中重写父类的该方法时 也要抛出异常 而且抛 出的异常不 能多于父类中抛出的异常 可以等于父类中抛出的异常 换句话 说 重写方法一定不能抛出新的检查异常 或者比被重写方法声 明更加宽泛的检查型异常 例如 父类的一个方法申明了一个检 查异常 l o e x c e p t i o n 在重写这个方法时就不能抛出 e x c e p t i o n 只能抛出 i o e x c e p t i o n的子类异常 可以抛出非检查异常 同样的道理 如果子类中创建了一个成员变量 而该变量和 父类中的一个变量名称相同 称作变量重写或属性覆盖 但是此 概念一般很少有人去研究它 因为意义不大 三 方法重载 o v e r l o a d i n g 一 如何定义重载 方法的重写和重载只有一个字不同 很多初学者认为这两者十分相似 其实不然 方法重载是让类以 统一的方式处理不同类型数据的一种手段 调用方法时通过传递 给它们的不同个数和类型的参数来决定具体使用哪个方法 这就 是多态性 所谓方法重载是指在一个类中 多个方法的方法名相同 但 是参数列表不同 参数列表不同指的是参数个数 参数类型或者 参数的顺序不同 方法的重载在实际应用中也会经常用到 不仅 是一般的方法 构造方法也可以重载 下面通过一个实例来分析 重载的定义和使用方法 cl as s p e rs o n i s t r i n g n a m e i nt a g e v o i d p r i n t f s y s t e m o u t p r i n t l n 姓名 n a m e 年龄 a g e v o i d p r i n t s t r i n g a i n t b f s y s t e m o u t p r i n t l n 姓名 a 年龄 岫 v o i d p r i n t s t r i n g a i n t b i n t c s y s t e m o u t p r i n t l n 姓名 a 年龄 b i d 号 c v o i d p r i n t s t r i n g a i n t b d o u b l e c s y s t e m o u t p r i n t l n 姓名 a 年龄 b i d 号 c pu bl i c cl a s s ov e r lo a d ex a mpl eo l p u b l i c s t a t i c v o i d m a i n s t r i n g a r g s 口 p e r s o n p l n e w p e r s o n p 1 n a n l e 李明 p1 a g e 22 p 1 p r i n t p 1 p r i n t 王小早 1 9 p 1 p r i n t 金波 1 8 1 0 0 3 2 5 p 1 p r i n t 婉宁 2 5 1 1 0 9 0 3 在上面 的程序 中 可以看到 p e r s o n类中有多个名为 v o i d p r i n t的方法 这就是方法的重载 执行程序 运行结果如下 姓名 李 明 年龄 2 2 姓名 王小早 年龄 l 9 姓名 金波 年龄 1 8 i d 号 1 0 0 3 2 5 姓名 婉宁 年龄 2 5 i d 号 1 1 0 9 0 3 在方法重载时 方法之间需要存在一定的联系 因为这样可 以提高程序的可读性 一般只重载功能相似的方法 重载规则 重载是指我们可以定义一些名称相同的方 法 通过定义不同的参数来区分这些方法 然后再调用时 j a v a 虚拟机就会根据不同的参数列表来选择合适的方法执行 也就是 说 当一个重载方法被调用时 j a v a用参数的类型和 或 个数 来决定实际调用的重载方法 因此 每个重载方法的参数的类型 或个数必须是不同 虽然每个重载方法可 以有不同的返回类型 但返回类型并不足 以区分所使用的是哪个方法 当j a v a 调用一个 重载方法是 参数与调用参数匹配的方法被执行 在使用重载要 注意以下的几点 1 在使用重载时只能通过不同的参数列表 必须具有不同的 参数列表 例如 不同的参数类型 不同的参数个数 不同的参 数顺序 当然 同一方法内的几个参数类型必须不一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 讲解员操作评估模拟考核试卷含答案
- 2025年下半年教师资格证考试《综合素质》(中学)真题(解析)附答案
- 2025年全国计算机等级考试一级笔试真题解析及答案
- 2025年上半年教师资格证考试《保教知识与能力》(幼儿园)题及答案
- 2026年秋季开学高中开学第一课(时间管理)课件
- 2026年秋季开学高三开局即冲刺动员大会课件
- 2026年秋季开学初中物理启蒙心理健康讲座课件
- 2024年嵌入式面试试题(附答案)
- 2026浙江省教师职称考试(物理)历年参考题库含答案详解3卷
- 2026浙江卫生系统招聘考试(英语)历年参考题库含答案详解3卷
- 民宿员工聘用合同范本
- 企业级BOM培训课件
- 主井提升培训课件
- 浙江金石亚药医药科技有限公司迁扩建项目环评报告
- 酒店安全巡查日常检查记录表
- 招商岗位测试题及答案
- 医院后勤管理与设备职责
- 《左传》完整版本
- 周三多-管理学:原理与方法(第七版),第三章
- 无人机遥感图像融合
- 高考英语复习读后续写练习 善举篇 改变家乡为无法使用操场的孩子们带来福音 课件
评论
0/150
提交评论