目录
一、重写(覆写/重写/覆盖)
就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法。
子类实现父类的同名方法 , 并且参数的类型和个数完全相同 , 这种情况称为 覆写 / 重写 / 覆盖.
重写的规则
- 方法同名
- 参数类型和个数相同
- 返回类型相同
关于重写的注意事项
- 普通方法可以重写, static 修饰的静态方法不能重写.
- 重写中子类的方法的访问权限不能低于父类的方法访问权限.
- 重写的方法返回值类型不一定和父类的方法相同(但是建议最好写成相同, 特殊情况除外).
子类访问权限要大于父类
// Animal.java
public class Animal {
public void eat(String food) {
...
}
}
// Bird.java
public class Bird extends Animal {
// 将子类的 eat 改成 private
private void eat(String food) {
...
}
}
// 编译出错
Error:(8, 10) java: com.bit.Bird中的eat(java.lang.String)无法覆盖com.bit.Animal中的
eat(java.lang.String)
正在尝试分配更低的访问权限; 以前为public
有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发 现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写.提高了写代码的效率.
我们推荐在代码中进行重写方法时
显式加上
@Override
注解
.
// Bird.java
public class Bird extends Animal {
@Override
private void eat(String food) {
...
}
}
二、重载
同一个方法名字,提供不同版本的实现,称为方法重载 补充:构造方法也可以重载
重载规则:
- 方法名相同
- 参数类型不同、参数个数不同甚至是参数顺序不同
- 返回值不作要求
- 必须在同一个类中
class Test{
public static void main(String[] args) {
int a=10;
int b=20;
int i=add(a,b);
System.out.println(i);
double a2=10.5;
double b2=12.5;
double i2=add(a2,b2);
System.out.println(i2);
}
public static int add(int x,int y){
return x+y;
}
public static double add(double x,double y){
return x+y;
}
}
//结果
30
23
如代码中一样,通过传入的参数类型不同,确定调用哪种的重载方法。