重载
- 发生在同一个类中;
- 方法名必须相同;
- 参数类型不同、个数不同、顺序不同;
- 方法返回值和访问修饰符可以不同。
举个例子:
public class Student {
private Integer id;
private String name;
private Integer age;
public Student() {
}
public Student(Integer id) {
this.id = id;
}
public Student(Integer id, String name) {
this.id = id;
this.name = name;
}
public Student(String name, Integer id) {
this.name = name;
this.id = id;
}
private Student(Integer id, Integer age) {
this.id = id;
this.age =age;
}
}
重写
- 继承才会发生重写;
- 重写发生在运行期,是子类对父类方法进行重新编写和实现;
- 重写方法返回值、方法名、参数列表必须相同;
- 抛出异常范围小于等于父类;
- 访问修饰符范围大于等于父类;
- 父类为 final 修饰的类,因不能被继承,所以其方法不能被重写;
- 父类方法访问修饰符为 private/fina/static 时,子类不能重写该方法,但 static 方法能够被再次声明;
- 构造方法无法被重写;
小结:
重写就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变。
重载和重写的区别
区别点 | 重载 | 重写 |
---|---|---|
发生范围 | 同一个类 | 子类 |
参数列表 | 必须修改 | 必须相同 |
返回类型 | 可修改 | 子类比父类返回类型相同或更小 |
异常 | 可修改 | 子类比父类异常相同或范围更小 |
访问修饰符 | 可修改 | 子类和父类相同或降低限制 |
发生阶段 | 编译器 | 运行期 |