Overload重载:指同一个类中可以同时存在多个同名的方法,但是方法的参数个数、参数类型及参数顺序不能相同(返回值类型可以改变)。
Override重写:指子类中存在与父类某个方法的方法名、参数个数和参数类型以及返回值类型完全一样的方法,总之和父类中的某个方法签名完全一样。通过子类创建的实例调用这个方法时,将调用子类中的这个方法。就相当于子类中的这个方法把父类中的这个同名方法给覆盖了一样了。
- 重写是面向对象编程中多态性的实现方式之一。
- 子类中的这个方法只能抛出比父类中的同名方法少的异常或是抛出父类方法中抛出异常的子异常。
- 子类中覆盖的方法的访问权限只能比父类中的大或相等,不能更小。
- 如果父类中的某个方法是private的,且子类中存在一个同名和同参数的方法时,此时不能称之为Override。因为子类根本不知道父类有这么一个方法,何来覆盖。
Overload的方法是否可以改变返回值类型?
- 如果方法名相同,参数列表不同,那是可以改变返回值类型的。
final 方法不能被覆盖。
static 方法不能被子类继承,也就不能覆盖。
要实现重载,只能通过不同的参数列表实现,不能通过 访问修饰符、返回值、抛出的异常实现。
覆盖的方法,只能改变访问修饰符、抛出的异常,不能改变返回类型、方法名和参数列表。且访问修饰符只能扩大或不变,抛出的异常只能是父类中同名方法抛出异常的子集或子异常。 如果改变了其他,就不能称之为覆盖,就相当于在子类中新增了个方法。