方法重载与覆盖的区别 方法覆盖和方法重载的特征分别是什么

方法重载与覆盖的区别

  在平常开发工作中,经常会用到方法重写和方法重载。方法重写和方法重载的区别,在面试中也会经常被问到,那么具体有什么区别呢?下面是小编帮大家整理的方法重载与覆盖的区别,供大家参考借鉴,希望可以帮助到有需要的朋友。

  方法重载与覆盖的区别 篇1

  方法覆盖(重写)和方法重载具有以下相同点:

  ·都要求方法同名。

  ·都可以用于抽象方法和非抽象方法之间。

  方法覆盖和方法重载具有以下不同点:

  ·方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致。

  · 方法覆盖要求返回类型必须一致,而方法重载对此不做限制。

  ·方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方法(包括从父类中继承而来的方法)。

  ·方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。

  ·父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次

  方法重载与覆盖的区别 篇2

  一、重载和覆盖

  多态性也是面向对象方法的一个重要特性。多态性是指在在程序中出现的"重名"现象,即在一个程序中相同的名字可以表示不同的实现。

  在JAVA中,多态性主要表现在如下两个方面:

  (1)方法重载。通常指在同一个类中,相同的方法名对应着不同的方法实现,但是方法的参数不同。

  (2)成员覆盖。通常指在不同类(父类和子类)中,允许有相同的变量名,但是数据类型不同;也允许有相同的方法名,但是对应的方法实现不同。

  在重载的情况下,同一类中具有相同的名字的方法。如何选择它的方法体呢?不能使用类名来区分,通常采用不同的方法形参表,区分重载要求形参在类型,个数和顺序的不同,在定义重载方法时,应在方法的形参的类型,个数和顺序有所不同,以便在选择时能够区别开来。

  在覆盖的情况下,同名的方法存在于不同的类中,在调用方法只要指明其方法所归属的类名就可以了。

  二、重载和覆盖的区别

  在同一个类中方法成员的名称相同,但参数的类型和个数不同,这称为重载。

  在存在继承关系的两个话,子类与父类的方法成员名称相同、参数的类型和个数相同的话,子类的方法覆盖父类的方法,这称为覆盖。

  方法重载与覆盖的区别 篇3

  方法重载(Overload)是指在一个java类的定义中,可以定义多个相同名字的方法,那么只需要这些方法的参数不同就可以,这个就叫做方法重载。

  方法重载概括成一句话就是同名不同参。同名是指方法名相同,不同参是指参数个数不同,参数的类型不同(其中在参数类型不同时,参数的顺序不同也可以),

  方法重载只和方法名和方法参数有关,和方法的参数名字以及方法的返回值无关,

  其中方法的参数名字以及方法的返回值与方法重载无关。

  方法重写(Override)是指在子类中定义了一个方法,并且这个方法的返回类型,方法名以及方法参数类型,参数个数与从父类继承过来的方法完全相同,那么我们就说子类这个方法重写了父类的方法。

  其中子类的访问修饰符在重写这个方法时候不能必须大于或等于父类的访问修饰符。

  如果父类的方法有异常声明,那么子类中声明抛出异常类型不能比父类的范围广。

  子类一旦重写了父类的方法,就会将父类的这个方法隐藏或覆盖,如果子类对象调用这个方法,调用的是重写后的方法。那么想调用这个隐藏方法怎么办呢?java中提供了super关键字来实现。

  通过上面对它们定义以及特点的理解,下面再来总结它们之间的区别。

  1.方法重载是发生一个类当中,而方法重写是发生在子类和父类之间,是在继承下面发生的。

  2.方法重载能够改变方法的返回值,而方法重写不可以。

  3.方法重载和方法重写都是java多态的一种体现,区别在于方法重载是编译时的多态,而方法重写则是运行时的多态。

  方法重载与覆盖的区别 篇4

  一、方法重写(0veriding)

  在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。

  子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。

  重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。

  在Java中覆盖继承父类的方法就是通过方法的重写来实现的。所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。

  这样,就可以实现对父类方法的覆盖。如果子类将父类中的方法重写了,调用的时候肯定是调用被重写过的方法,那么如果现在一定要调用父类中的方法该怎么办呢?

  此时,通过使用super关键就可以实现这个功能,super关键字可以从子类访问父类中的内容,如果要访问被重写过的方法,使用“super.方法名(参数列表)”的形式调用。

  如果要使用super关键字不一定非要在方法重写之后使用,也可以明确地表示某个方法是从父类中继承而来的。使用super只是更加明确的说,要从父类中查找,就不在子类查找了。

  二、重写规则

  在重写方法时,需要遵循以下的规则:

  (一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。

  (二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。..

  (三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。编写过Java程序的人就知道,

  父类中的方法并不是在任何情况下都可以重写的,当父类中方法的'访问权限修饰符为private时,该方法只能被自己的类访问,

  不能被外部的类访问,在子类是不能被重写的。如果定义父类的方法为public,在子类定义为private,程序运行时就会报错。

  (四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。

  所以如果某一个方法在父类中的访问权限是private,那么就不能在子类中对其进行重写。如果重新定义,也只是定义了一个新的方法,不会达到重写的效果。

  (五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,

  而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,

  或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,

  只能抛出IOException的子类异常,可以抛出非检查异常。同样的道理,如果子类中创建了一个成员变量,

  而该变量和父类中的一个变量名称相同,称作变量重写或属性覆盖。但是此概念一般很少有人去研究它,因为意义不大。

  三、方法重载(Overloading)

  方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。

  所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。

  方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。

  在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。

  重载是指我们可以定义一些名称相同的方法,通过定义不同的参数来区分这些方法,然后再调用时,Java虚拟机就会根据不同的参数列表来选择合适的方法执行。也就是说,当一个重载方法被调用时,Java用参数的类型或个数来决定实际调用的重载方法。因此,每个重载方法的参数的类型或个数必须是不同。

  虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。

  当Java调用一个重载方法是,参数与调用参数匹配的方法被执行。在使用重载要注意以下的几点:

  1.在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。

  2.不能通过访问权限、返回类型、抛出的异常进行重载。

  3.方法的异常类型和数目不会对重载造成影响。

  4.可以有不同的返回类型,只要参数列表不同就可以了。

  5.可以有不同的访问修饰符。

  6.可以抛出不同的异常。

  四、方法重写与方法重载的区别

  方法重写(方法覆盖)

  概念:子类继承父类中的方法,想在原有的基础上作一定的修改。

  格式特点:

  1.方法名、参数列表必须完全一致

  2.返回类型可以相同,也可以不同,不同必须是原来返回类型的子类型(可隐式转换即可)JAVA近期版本的新特性,在之前子类返回值类型必须和父类返回值类型保持一致

  2.子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)

  3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)

  方法重载

  概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。

  格式特点:

  1.方法名相同。

  2.方法的参数表必须不同

  如果参数个数不同,就不管它的参数类型了!

  如果参数个数相同,那么参数的类型必须不同。

  3.方法的返回类型、修饰符可以相同,也可不同。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1156092664@qq.com 举报,一经查实,本站将立刻删除。

在线客服
分享本页
返回顶部