1、重载是在同一个类中,可声明多个同名方法,但参数列表不同(参数顺序,个数,类型)。而重写是在子类中,对从父类中继承的方法进行重新编写,但方法名,参数列表(参数顺序,个数,类型),返回值类型必须保持一致。
2、重载实现的是编译时的多态性,而重写实现的是运行时的多态性。
3、重载可以抛出不同的异常, 而重写可以减少或删除,但一定不能抛出新的检查异常。
4、重载可以有不同的访问权限修饰符, 而重写不能拥有比父类方法更加严格的访问权限修饰符。
举例:
重载
// 重载:方法名相同 参数不同
public void setStudentInfo(int id, String name){
this.id = id;
this.name = name;
}
public void setStudentInfo(int id, String name, String email){
this.id = id;
this.name = name;
this.email = email;
}
打印结果
学生ID:301 姓名:Jack
学生ID:702 姓名:Jack Ma 邮箱:702@qq.com
重写
假设有Person类
class Person {
public void show(String name) {
System.out.print(name + "会唱歌");
}
}
在重写show方法时要继承父类Person,且参数列表(参数顺序,个数,类型),返回值类型都要保持一致。
public class Student extends Person{
public void show(String name){
//重写父类Person的show(String name)方法
System.out.print(name+"不仅会唱歌,还会跳舞!");
};
public static void main(String[] args) {
Student s1 = new Student();
s1.show("Pony");
}
}
打印结果
Pony不仅会唱歌,还会跳舞!