重写(override)和重载(overload)的区别

1.重写(override)和重载(overload)的区别

方法重载是让类以统一的方式处理不同数据类型的一种手段。多个同名函数同时存在,但具有不同的参数个数/类型。重载是一个类中多态的一种体现。

Java的方法重载,就是在一个类中可以创建多个方法,他们具有相同的名字,但有不同的参数和不同的定义。调用方法时通过传入参数的个数和类型来决定具体使用哪种方法,这就是多态性。

方法重写是父类和子类之间多态性的体现。子类对父类的方法进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Override)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想做一定的修改。这就需要方法的重写。方法重写又称做方法覆盖。

如果子类的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法覆盖原有的方法,如需要用父类中原有的方法,可以使用super关键字引用当前类的父类。

总结:

方法重写(override)

  1. 方法名、参数、返回值类型必须相同;
  2. 子类方法不能缩小父类方法的访问权限;
  3. 子类方法不能比父类方法抛出更多的异常(子类也可以不抛异常);
  4. 存在于父类和子类之间;
  5. 被覆盖的方法不能为private,否则在子类中只是重新定义了一个方法,并没有对其进行覆盖;
  6. 方法被定义为final不能被重写。

方法重载(overload)

  1. 参数类型、个数、顺序至少有一个不一致(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float), 但是不能为fun(int, int));
  2. 不能重载只有返回值不同的方法。
  3. 方法的异常类型和数目不会对重载造成影响;
  4. 存在于父类、子类和同类中;
  5. 对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。