首先修饰符的从小到大的排序是private protect default public
Java中子类继承父类的是基于子类的对象可以被当做父类的对象使用,即子类对象可以替代父类对象使用。如果子类方法的访问修饰符比父类的小,那么在子类对象被当做父类对象使用时,父类对象可能无法访问子类方法,从而破坏了继承的特性。因此,为了保证子类对象可以完全替代父类对象使用,子类方法的访问修饰符必须大于等于父类的。
举个栗子:
当不匹配时,会报错如上图所示:
正因为这个访问修饰符的限定,使得java可以让父类的引用调用子类的对象,实现抽象和可扩展的目的,这就好比是可以调用子类中具有父类属性的方法。
public class UpwardTransformation {
public static void main(String[] args) {
//实现向上转型
Animal cat = new Cat();
cat.eat();
}
}
class Animal{
public void eat(){
System.out.println("进食");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("抓老鼠");
}
//不应该如下写
// private void eat(){
// System.out.println("抓老鼠");
// }
}
当cat调用方法时,就会显示子类重写的内容