一、重载与重写的概念
重载(Overload):在同一个类中,方法名相同,参数列表不同(参数类型不同、参数个数不同、参数顺序不同)被视为方法的重载(方法的返回类型不作为判定标准)。常见的重载:类的构造器。
举一个简单的例子:
// 带参数的构造器
public Student(String name, int age, String gender)
//参数不同的构造器
public Student(String name)
//无参构造器
public Student()
重写(Override):在父子类中,当子类不想直接继承父类的某个方法时,在不改变父类方法的返回类型、方法名、参数列表的同时,对方法体进行重写,这种行为被视为方法的重写。
举个简单的例子:
class A {
public int calculate(int a,int b){ // 父类calculate方法用于计算加法
return a+b;
}
}
class B extends A{
public int calculate(int a, int b) { // 子类calculate方法用于计算乘法
return a*b;
}
}
关于重写的注意事项:
1. 子类不能重写父类访问权限为private的方法。
2. 子类重写的方法的访问权限不能低于父类被重写的方法。
3. 子类重写的方法抛出异常的数量不能多于父类的方法的异常。
4.当返回类型为自定义类型时,子类重写的方法的返回类型不能大于父类的返回类型(里氏代换原则)。
5. 出现多重继承关系的同名方法,调用时采用就近原则(即优先调用子类同名方法)。
二、重载与重写的区别
①重载一般发生在同一个类中,重写一般发生在父子类中。
②重载的参数列表必须不同,重写的参数列表必须相同。
③重载对返回类型不做要求,重写返回类型必须相同并且有额外要求。
④方法的重载为编译时多态,重写为运行时多态。