overload意为重载,override意为覆盖,overwrite意为重写。从中文意思上看,并无差别,但是如下所示,给出英文定义:
Overloading occurs when two or more methods in one class have the same method name but different parameters.
Overriding or overwrite means having two methods with the same method name and parameters (i.e., method signature). One of the methods is in the parent class and the other is in the child class.
即overload为同一个类中,存在多个方法名相同的函数,但是他们拥有不同的参数(参数个数,类型,顺序)。
而 override 和 overwrite 为子类和父类之间,子类和父类拥有同样的方法名和参数列表,只是将方法体重写。这是面向对象编程的多态性。
重载规则:
(1)包含多个同名函数,但是参数各不相同。
(2)参数类型、参数个数、参数顺序(不同类型间)至少有一个不同。
(3)可以改变返回值类型(不能作为重载判断依据)
(4)可以改变访问修饰符(不能作为重载判断依据)
(5)可以改变异常类型和数量(不能作为重载判断依据)
重写规则:
(1)存在于子类和父类之间
(2)子类必须和父类的方法名和参数列表必须完全相同。
(3)可以改变返回值类型,但子类返回值类型必须是父类返回值类型的派生类。
(4)可以改变访问修饰符,但是子类权限只能更开放。
(5)声明为 final 的方法不能被重写。
(6)声明为 static 的方法不能被重写,但是可以被重新声明。
(7)构造器不能被重写。
(8)子类和父类在同一个包中时,子类可以重写父类所有方法(出 private 和 final)。
(9)子类和父类在不同包中时,子类只能重写父类的 public 和 protected 的非 final 方法。
(10)重写可以抛出任何非强制性异常,但是不能抛出新的强制性异常,或者比父类方法更广泛的异常。
强制性异常:必须在抛出异常的部分 try catch 或者向上 throws。
非强制性异常:用不用 try catch 和 throw 都可以。
java 中只有 RuntimeException 是强制性异常,其余均为非强制性异常。