Overload表示重载,override表示覆盖,overwrite表示重写。在中文里没有区别,但是如下图,给出了英文定义:当一个类中的两个或两个以上的方法有相同的方法名但参数不同时,就发生了重
Overload表示重载,override表示覆盖,overwrite表示重写。在中文里没有区别,但是如下图,给出了英文定义:当一个类中的两个或两个以上的方法有相同的方法名但参数不同时,就发生了重载。重载或覆盖意味着。两个方法具有相同的方法名和参数(即方法签名)。其中一个方法在父类中,另一个在子类中。
也就是说,重载是指在同一个类中有多个方法名相同的函数,但它们有不同的参数(参数的个数、类型和顺序)。覆盖和覆盖是在子类和父类之间。子类和父类有相同的方法名和参数列表,但只是重写了方法权重。这就是面向对象编程的多态性。
重载规则:(1)包含多个同名函数,但参数不同。(2)参数类型、参数个数、参数顺序(不同类型之间)至少有一处不同。(3)可以改变返回值的类型(不能作为判断重载的依据)(4)可以改变访问修饰符(不能作为判断重载的依据)(5)可以改变异常的类型和个数(不能作为判断重载的依据)。
重写规则:(1)存在于子类和父类之间;(2)子类必须具有与父类相同的方法名和参数列表。(3)可以改变返回值类型,但子类的返回值类型必须是父类的返回值类型的派生类。(4)访问修饰符可以更改,但子类权限只能更开放。(5)声明为final的方法不能重写。(6)声明为静态的方法不能被重写,但可以重新声明。(7)构造函数不能重写。(8)当子类和父类在同一个包中时,子类可以覆盖父类的所有方法(出于private和final)。(9)当子类和父类是final不同的包时,子类只能重写父类的public和protected非final方法。(10) Override可以抛出任何非强制异常,但不能抛出新的强制异常,或者比父方法更广泛的异常。
强制异常:您必须在抛出异常的部分尝试catch或throw up。非强制异常:可以使用也可以不使用try catch和throw。在java中,只有RuntimeException是强制异常,其余都是非强制异常。