重载
定义:在同一类中两个或者多个方法的重写
规则:
方法名 相同 |
参数列表 不同 (个数,类型,参数顺序) |
返回类型 可以相同也可以不同 |
方法的返回类型不同不足以成为方法的重载 |
重载是发生在编译时的,因为编译器可以 根据参数的类型来选择使用那个方法 |
重写
定义:有继承关系在子类中发生
规则:
方法名 相同 |
参数列表 相同 |
返回值类型 可以相同也可以是原类型的子类型 |
访问性 重写方法不能比原方法访问性差 |
异常 重写方法不能比原方法抛出异常多 |
final类型 被final修饰的不能重写 |
private 被private修饰的不能重写 |
static 被static修饰的不能重写 |
重写发生在运行时,因为编译期编译器不知道并且没办法确定该去调用哪个方法,JVM会在代码运行的时候做出决定 |
重载和重写的不同:
重载 | 重写 | |
使用条件 | 同一类 | 继承关系,子类中 |
参数列表 | 不同 | 相同 |
返回类型 | 可同可不同 | 相同 |
访问权限 | 无要求 | 有特殊要求,见规则 |
次数限制 | 重载多次 | 父类方法只能被子类重写一次 |
作用时间 | 编译期 | 运行期 |