public class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
public class Dog extends Animal {
public Dog(String name){
super(name);
}
}
对于上面的代码子类实现了父类的同名方法, 并且参数的类型和个数完全相同, 这种情况称为 覆写/重写/覆盖(Override).
方法重写/覆写(Override) :
1.方法名相同
2.参数必须完全相同(个数和类型都要相同)
3.返回值一般情况下也应该要相同
4.子类的访问权限不能低于父类的访问权限
若将上述代码中子类的eat方法改为private,如下:
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
private void eat(String food) {
super.eat(food);
}
}
则在程序编译时会出现以下错误:
一般将子类的访问权限和父类的访问权限设为一样
5.普通方法可以重写,static修饰的静态方法不可以重写
6.针对重写的方法,可以用@override注解来显示指定,如:
@Override
public void eat(String food) {
super.eat(food);
}
@Override的功能:
1.让代码读者可以更清楚的理解这个方法是重写的
2.运行代码时可以做一些编译器的检查