重写(Override)
重写是子类对允许访问的父类方法的方法体重新进行编写,返回值和形参不发生改变;
通过重写,子类可以根据需要定义特定于自身的行为,根据需要实现父类的方法;
方法的重写规则
重写方法时参数列表要保持不变;
重写方法的返回值类型可以发生改变,但必须是父类返回值的派生类;
重写方法的访问权限不能比被重写方法的访问权限更低;
被声明为final的方法不能被重写;
被声明为static的方法不能被重写,但可以重新声明;
构造方法不能被重写;
若子类和父类在同一个包里,则子类可以重写父类的方法非final方法;
若子类和父类不在同一个包里,则子类只能重复父类的声明为public和protected的非final方法;
super关键字
super关键字除了可以用于调用父类的构造函数,还可以调用父类的被重写方法;
重载(Overload)
重载发生在同一个类当中或子类当中,当方法名字相同,而参数不同时则成为重载(每个重载方法包括构造方法都必须具有独特的参数列表);
重载的方法的返回值类型可以发生变化,也可以不发生变化;
重载规则
重载时必须改变参数列表,包括改变参数个数或参数类型;
重载时可以修改方法的访问修饰符;
不能以返回值类型的变化来判定方法是否重载;
重写与重载之间的区别
重写 | 重载 | |
参数列表 | 不能修改 | 一定要修改 |
返回类型 | 不能修改 | 可以修改 |
异常 | 可以减少或删除,但不能抛出新增或更广的异常 | 可以修改 |
访问 | 不能用更严格的访问修饰符 | 可以修改 |
方法重载是一个类的多态性的表现,方法重写是子类与父类的一种多态性的表现;