JAVA中的基础-----重载与重写(覆盖)的区别:overload与override

时间:2022-05-04 09:20:54

JAVA中多态的实现机制主要通过overload和override实现。

1)方法的重载:简言之,就是指同一个类有多个同名的方法,这些方法拥有不同的参数(同名不同参)。可以认为是类中方法的多态性,也称为编译时多态

2)方法的重写(覆盖):子类可覆盖父类的方法,已达到“个性化“的目的。(同名同参同类型)使得JAVA可以在运行时动态绑定(将一个方法的调用与一个方法的主体连接在一起),也称为运行时多态

两者的区别:

重载(overload):是指在一个类中定义了多个同名不同参的方法。

1)重载是通过参数的不同来区别的,如参数个数、参数的类型、参数的顺序不同。

2)重载不能通过方法的访问权限(public/protected/private)、返回值类型(String/void/int)和抛出的异常来进行重载。

3)对继承来说,如果基类方法的访问权限为private(私有的),那么不能在派生类中对其重载(Ps:即不可以对private 修饰过的方法进行重载)。

      若派生类也定义了一个同名的函数,这只是新的方法,不会达到重载的效果。

重写或覆盖(Override):是指派生类覆盖基类函数。

1)派生类中覆盖的方法必须与基类中的方法同名同参。

2)派生类中覆盖的方法的返回值必须与基类中的保持一致。

3)派生类中覆盖的方法所抛出的异常必须与基类保持一致。

4)不可以对基类中private修饰的方法进行覆盖(即使写了也是属于新的子类方法)

5)不可以在派生类出现与基类同名同参不同返回类型的函数,如果有,编译器错误(因为编译器无法区分同名函数是属于派生类还是基类的)。

两者的主要区别:

1)覆盖Override是父子类之间的关系(垂直关系),而重载Overload是自己的内部方法之间的关系(水平关系)。

2)覆盖Override只能由一个方法或只能由一对方法产生关系,而重载Overload是多个方法之间的关系。

3)覆盖Override调用方法体是根据对象的类型来决定,但是重载Overload是根据调用时的实参和形参表来选择方法体的。