Fighting365' Blog

Java重载与覆盖的比较

重载(overload):通过不同的方法参数来区分,例如不同的参数个数、不同的 参数类型或者不同的参数顺序。
覆盖(override):指的是派生类函数覆盖基类函数,覆盖一个方法,并进行重写来实现不同的作用。
总体来说,重载和覆盖都是Java多态的不同表现形式。其中,重载实在一个类中多态的一种表现,是指在一个类中定义多个同名的方法,他们或有不同的参数个数或者不同的参数数类型。使用重载时应该注意以下几点:

  1. 重载通过不同的参数来区分;
  2. 不能通过访问权限、返回值类型和抛异常类型来区分;
  3. 对于继承而言,如果基类方法的访问权限是private,那么就不能对该方法进行重载;如果派生类也定义了一个同名的函数,这仅仅是一个新的方法,并不是重载。

使用覆盖时应该注意以下几点:

  1. 派生类中的覆盖方法必须要和基类中被覆盖方法有相同的函数名和参数;
    2.派生类中的覆盖方法的返回值必须要和基类中被覆盖方法的返回值相同;
  2. 派生类中的抛异常的类型必须要和基类中被覆盖方法所抛异常一致;
  3. 基类中被覆盖方法不能为private,负责其子类只是在定义一个方法,并不是对其进行覆盖。

综上所述,重载与覆盖的区别主要有以下几点:

  1. 覆盖是子类和父类之间的关系,是垂直关系;重写是同一个类中方法之间的关系,是一种水平关系;
  2. 覆盖只能有一个或一对方法产生;重载时多个方法之间的关系;
  3. 覆盖要求参数列表相同;重载要求参数列表不同;
  4. 覆盖关系中,调用方法体是根据对象的类型决定的;而重载关系是根据调用的实参与形参来选择方法体。
Fighting365 wechat
ex. subscribe to my blog by scanning my public wechat account