Java中的方法重写与方法重载


科技信息 2009 年 第 3 期SCIENCE & TECHNOLOGY INFORMATION 0.引言:面向对象是当前计算机界关心的重点,从上个世纪 90 年 代开始它已成为主流的软件开发方法,而在初学面向对象程序设计语 言的人而言, 对面向对象和类的相关概念和应用的理解非常重要,本 文介绍了类、构造方法的概念,并介绍了方法重写及方法重载在类的 继承和多态性方面的使用,对学会使用多态的方式编写程序、提高程 序的可维护性奠定了基础。 1.概述 面向对象的方法符合人们的思维习惯,同时有助于控制软件的复 杂性,提高软件的生产效率,从而得到了广泛认可,已经成为目前最为 流行的一种软件开发方法。 JAVA 是一种较为流行的面向对象的程序设计语言, 在对 JAVA 的学习中,一些概念很容易混淆。 1.1 类的概念 对象:是面向对象方法的中心和出发点,对象可以是现实生活中 的一个物理对象,也可以是某一类概念实体的事例。 比如一个人、一辆 车,乃至一种语言、一个图形、一种职业等等。 类:是一组具有相同字段和相同操作的对象的集合,是对一系列 具有相同性质的对象的抽象。 它描述的不是单个对象,而是对象全体 的共同特征。 比如说一个读者是一个对象的话,所有读者可以作为一 个模板,“读者”这个概念就成为一个类。 每个读者都是“读者类”的一 个实例,也可以使用类所提供的各种服务。 1.2 构造函数 每个类都至少需要一个与类名同名的方法,叫做构造函数,以便 在将类实例化为对象时分配存储空间并对重要字段做必要的初始化 工作。 如果在类的定义中没有显式给出。 系统将默认创建一个空的构 造函数。 当然,此构造函数并不对类的字段进行任何初始化。 继承:是以现有类型定义为基础来创建新类型的技术。 同类之间 的继承,派生类可以享受基类所提供的服务的同时,还可以对基类的 功能进行扩充,而不对基类本身进行修改。 这种重用技术大大提高了 软件开发的效率。 JAVA 中继承的实现 在 java 语言中, 利用 extends 关键字来表示一个类继承了另一个 类: public class JavaTeacher extends Teacher() Teacher 类可以称为基类, 父 类, 而 JavaTeacher 类 就 可 以 称 为 Teacher 类的派生类或子类,在父类中只定义一些通用的属性与方法, 子类自动继承父类的属性和方法, 子类中可以定义特定的属性和方 法。 在 Java 中,子类可继承父类中的方法,而不需要重新编写相同的 方法。 但有时子类并不想原封不动地继承父类的方法,而是想作一定 的修改,这就需要采用方法的重写。 方法重写又称方法覆盖。 若子类 中的方法与父类中的某一方法具有相同的方法名、 返回类型和参数 表, 则新方法将覆盖原有的方法。 如需父类中原有的方法, 可使用 super 关键字,该关键字引用了当前类的父类。 重写方法只能存在于具有继承关系中,重写方法只能重写父类非 私有的方法。 2.方法重写(override) 2.1 方法重写举例 方法重写是指在子类中定义的一个方法,其名称、返回类型及参 数列表正好与父类中某个方法的名称、 返回类型及参数列表相匹配, 那么可以说,子类的方法重写了父类的方法。 例如: public class Father{ public void speak() { System.out.println("Father"); } } public class Son extends Father{ public void speak() { System.out.println("son"); } } 2.2 重写方法的规则: 2.2.1 参数列表必须完全与被重写的方法的相同,否则不能称其为 重写而是重载。 2.2.2 返回的类型必须一直与被重写的方法的返回类型相同,否则 不能称其为重写而是重载。 访问修饰符的限制一定要大于被重写方法的访问修饰符(public> protected>default>private) 2.2.3 重写方法一定不能抛出新的检查异常或者比被重写方法申 明更加宽泛的检查型异常。 例如,父类的一个方法申明了一个检查异 常 IOException, 在重写这个方法是就不能抛出 Exception, 只能抛出 IOException 的子类异常,可以抛出非检查异常。 3.方法重载(overLoad) 3.1 方法重载的概念 方法重载是让类以统一的方式处理不同类型数据的一种手段。 Java 的方法重载,就是在类中可以创建多个方法,它们具有相同的名 字,但具有不同的参数和不同的定义。 调用方法时通过传递给它们的 不同个数和类型的参数来决定具体使用哪个方法, 这就是多态性。 下面是一个方法重载的例子: class MethodOverloading { viod receive(int i) { System.out.println("Received one int data"); System.out.println("i="+i); } viod receive(float f) { System.out.println("Received one float data"); System.out.println("f="+f); } viod receive(String s) { System.out.println("Received a String"); System.out.println("s="+s); } } 方法重载一般出现在同一个类中。 3.2 方法重载的规则 overload 对我们来说可能比较熟悉,可以翻译为重载,它是指我们 可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些 方法,然后再调用时,Java 虚拟机就会根据不同的参数样式,来选择合 适的方法执行。 在使用重载要注意以下的几点: (1)在使用重载时只能通过不同的参数样式。 例如,不同的参数类 型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数 类型必须不一样,例如可以是 fun(int, float),但是不能(下转第 93 页) JAVA 中的方法重写与方法重载 李 宁 (西安铁路职业技术学院 陕西 西安 710014) 【摘 要】在面向对象程序设计语言的应用中,JAVA 中的方法重写与方法重载在应用中会存在很多问题,一些概念很容易混淆。 本文就这 些概念给出了一些详细的论述,在理论和应用中来介绍方法重写与方法重载的区别。 【关键词】方法重写;方法重载;继承 ○IT论坛○ 83 科技信息 2009 年 第 3 期SCIENCE & TECHNOLOGY INFORMATION (上接第 83 页)为 fun(int, int)); (2)不能通过访问权限、返回类型、抛出的异常进行重载; (3)方法的异常类型和数目不会对重载造成影响; 方法重载的规则: (1)必须具有不同的参数列表; (2)可以有不同的返回类型,只要参数列表不同就可以了; (3)可以有不同的访问修饰符; (4)可以抛出不同的异常; 4.结束语 在面向对象程序设计的思想中,类的继承和多态性主要就是体现 在子类重写父类的方法。 而构造方法的重载作为方法重载的一个典型 特例,可以通过重载构造方法来表达对象的多种初始化行为。 灵活的 运用方法重写与方法重载,不仅能减少编码的工作量,也能大大提高 程序的可维护性及可扩展性。 用好重写和重载可以设计一个结构清 晰而简洁的类, 可以说重写和重载在编写代码过程中的作用非同一 般。 【参考文献】 [1]北大青鸟公司.编著《使用 JAVA 进行面向对象编程》2008 年出版. [责任编辑:韩铭] ● 科 ● 科 (上接第 68 页)务的体系结构的生存性分析中,系统被看作是由实现 特定服务的组件构成,这就需要确定出系统提供的服务。 从用户的角 度来讲,系统的生存性主要从系统提供给用户服务的连续性、正确性 等来衡量;从设计者的角度来看,主要看系统能否在受到攻击时为用户 提供基本服务;从攻击者的角度来看,使系统不能够正常提供某些基本 服务,就需要破坏系统相应的服务组件,以此完成对系统组件的脆弱性 分析。攻击树和攻击图是目前描述攻击最常用的方法[4]。攻击树建模首 先需要定义出攻击目标, 然后把攻击目标分解为多个不同的子目标。 这些子目标之间具有与和或的关系。 对子目标进行类似的分解,直到 所有的子目标均为原子目标为止。 原子目标是攻击者可以直接实现的 攻击任务。 只有当攻击树中包含或关系时才能对系统的脆弱性进行分 析,攻击树可以清晰地给出攻击者可以采取的不同的攻击路径。 对应 于这种建模方法的分析一般与攻击难度和攻击费用联系在一起,需要 对目标系统的结构组成等有较详细的了解。 基于服务组件的建模方法和基于状态的建模方法是动态的、抽象 的建模技术,是通过对系统的运行情况进行抽象分析而得到的。 3.结束语 在人们对网络安全性要求日益提高及入侵者攻击手段不断出现 的大前提下,网络可性存性研究成为当前确保信息系统安全的关键问 题。 本文引入工作流的概念从系统和环境端进行可生存性需求分析, 对系统可生存性进行了定性分析,并介绍了网络可生存性分析中的一 些建模技术。 给出可生存性一致的形式化定义、评估指标及分析方法; 对运行中的系统的可生存性进行分析;开发出支持各种方法的原型工 具,利用计算机辅助分析等都是该领域的研究方向。 【参考文献】 [1]Fisher J, Linger R. Survivability: protecting your critical systems [J]. IEEE Journal of Internet Computing, 1999, 3(6):55~63. [2]Srikitja A, et a1. On Providing Survivable QoS Services in the Next Generation Internet [R]. Supported in Part by NSF Grant NCR9506652 and DARPA under Agreement No.1730602-97-1-025. [3]HOWARD F.Survivability analysis of command and controlcommunication network part[J].IEEE Transactions on Com 2munications,1974,22(5):589-605. [4]林 闯,汪 洋,李 泉 林.网络安全的随机模型方法与评价技术[J].计 算 机 学 报, 2005,28(12):1943-1956. 作者简介:李勤(1971—),女,乐山师范学院副教授,硕士,研究方向为 CSCW 技术、软件复用等。 [责任编辑:张艳芳] 科 ● 士论文中首次提出了程序切片[1]的概念,程序切片是一种用于分解程 序的程序分析技术,这种技术是应用于程序代码完成之后而不是在程 序设计时。 当我们修改和维护程序时,切片技术可以把我们所关心的 部分提取出来,成为规模更小而且更为简单的切片,并且可以调试运 行,而且还不会影响程序运行的正确性。 程序切片的应用范围很广, 几乎遍及软件工程学科的各个方面, 不同概念的切片有其不同的应用,按照执行方向可以分为前向切片和 后向切片: ●向前切片。 切片集合中包含了所有受切片准则中变量的值影响 的程序部分。 当我们对一个已经测试完成的程序进行修改时,我们需 要知道我们的修改会对程序带来什么影响,也就是说会影响到后面的 哪条语句和控制谓词,这就是一个向前切片问题。 ●向后切片。 向后切片关心的是程序中所有能够影响切片准则中 的变量的程序部分。 当我们在程序测试过程中发现了某个错误,我们 需要查找引起这个错误的原因,也就是向前查找看哪条语句或者哪个 谓词表达式产生了这个错误, 并且如何传播到我们发现它的地方,这 就是一个向后切片的问题。 进行程序切片时,通过构造系统依赖图来表示过程内和过程间的 控制依赖和数据依赖的关系,并要求对行为的描述要按照某种特定形 式化方法进行,把这个行为表示为“在某些程序语句集中定义或使用 的某些变量的值”,然后进行切片得到切片结果。 这样我们就可以通过 分析模块中变量的失效模式,追踪每个失效模式对模块输出乃至对整 个系统的影响。显然,这与我们的软件详细级 FMEA 思想是相符合的。 软件详细级 FMEA 的目的是找出各种失效模式产生的原因及其 产生的影响,并提出预防和改进措施。 向后切片找出了影响指定行为 的程序语句集合,通过由后向前查找系统依赖图中与失效变量相关的 数据依赖边和控制依赖边,追踪导致变量失效的原因,进而采取相应 的改进措施。 向前切片的结果包含了指定行为对程序的产生影响的集合,通过 由前向后查找系统依赖图中与输入变量相关的数据依赖边和控制依 赖边,追踪对输出变量的影响。 将问题转化为系统依赖图中查找某个 结点的所有可达结点的问题。 由此可见,程序切片要完成软件详细级 FMEA 的功能必须要包括 向前切片和向后切片两部分。 3.结论 本文通过对软件详细级 FMEA 和程序切片技术的研究,提出了用 程序切片思想来进行软件详细级 FMEA 分析。我们所做的切片分析是 针对结构化程序设计语言的,下一步我们将进一步研究面向对象程序 的切片,面向对象程序的切片分析不仅要考虑程序中的各种数据流和 控制流,而且要考虑由类、对象、继承等产生的不同的依赖关系。 【参考文献】 [1]Mark Weiser.Program Slicing.Computer Science Department University of Maryland College Park,MD 20742. [2]李必信.程序切片技术及其应用.北京:科学出版社,2006. [责任编辑:张艳芳] ● ● ○IT论坛○ 93
还剩1页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

363922298

贡献于2012-09-20

下载需要 3 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf