本文参考 Java 重写(Override)与重载(Overload) | 菜鸟教程 (runoob.com)
重写与重载之间的区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
异常说的就是,比如父类是抛出一个IOEXPETION ,你子类就不能抛出EXpetition。
访问说的是 ,访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
-
声明为 final 的方法不能被重写。
-
声明为 static 的方法不能被重写,但是能够被再次声明。
-
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
-
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
Super 关键字的使用
当需要在子类中调用父类的被重写方法的里面内容时,就用super
class Animal{
public void move(){
System.out.println("动物可以移动");
System.out.println("aa");
}
}
class Dog extends Animal{
@Override
public void move() {
super.move();
}
}
public class test1{
public static void main(String args[]){
Animal b = new Dog(); // Dog 对象
b.move(); //执行 Dog类的方法
}
}
输出 : 动物可以移动 aa
如果你只重写move方法但是不使用super.move(),那么它是不会执行父类中move里面的具体实现。 也就是什么都不输出。