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

1、方法重写(0veriding)设计

在Java程序中,类的继承关系能够产生一个子类,子类继承父类,它具有了父类全部的特征,继承了父类全部的方法和变量。继承

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

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

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

这样,就能够实现对父类方法的覆盖。若是子类将父类中的方法重写了,调用的时候确定是调用被重写过的方法,那么若是如今必定要调用父类中的方法该怎么办呢?class

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

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

 

2、重写规则
在重写方法时,须要遵循如下的规则: 
(一) 父类方法的参数列表必须彻底与被子类重写的方法的参数列表相同,不然不能称其为重写而是重载。
(二) 父类的返回类型必须与被子类重写的方法返回类型相同,不然不能称其为重写而是重载。.. 
(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。编写过Java程序的人就知道,权限

父类中的方法并非在任何状况下均可以重写的,当父类中方法的访问权限修饰符为private时,该方法只能被本身的类访问,程序

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

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

因此若是某一个方法在父类中的访问权限是private,那么就不能在子类中对其进行重写。若是从新定义,也只是定义了一个新的方法,不会达到重写的效果。
(五) 在继承过程当中若是父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,

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

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

只能抛出IOException的子类异常,能够抛出非检查异常。一样的道理,若是子类中建立了一个成员变量,

而该变量和父类中的一个变量名称相同,称做变量重写或属性覆盖。可是此概念通常不多有人去研究它,由于意义不大。

 

3、方法重载(Overloading)

方法重载是让类以统一的方式处理不一样类型数据的一种手段。调用方法时经过传递给它们的不一样个数和类型的参数来决定具体使用哪一个方法,这就是多态性。
所谓方法重载是指在一个类中,多个方法的方法名相同,可是参数列表不一样。参数列表不一样指的是参数个数、参数类型或者参数的顺序不一样。

方法的重载在实际应用中也会常常用到。不只是通常的方法,构造方法也能够重载。

在方法重载时,方法之间须要存在必定的联系,由于这样能够提升程序的可读性,通常只重载功能类似的方法。

重载是指咱们能够定义一些名称相同的方法,经过定义不一样的参数来区分这些方法,而后再调用时,Java虚拟机就会根据不一样的参数列表来选择合适的方法执行

。也就是说,当一个重载方法被调用时,Java用参数的类型或个数来决定实际调用的重载方法。所以,每一个重载方法的参数的类型或个数必须是不一样。

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

当Java调用一个重载方法是,参数与调用参数匹配的方法被执行。在使用重载要注意如下的几点:
1.在使用重载时只能经过不一样的参数列表,必须具备不一样的参数列表。

2.不能经过访问权限、返回类型、抛出的异常进行重载。
3.方法的异常类型和数目不会对重载形成影响。
4.能够有不一样的返回类型,只要参数列表不一样就能够了。
5.能够有不一样的访问修饰符。

6.能够抛出不一样的异常。

 

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

相关文章
相关标签/搜索