使用限制性更强的访问修饰符覆盖方法

And*_*dTa 3 java

我想知道:为什么重写方法不能具有比重写方法更严格的访问修饰符?

例如:

class Animal{
    public void eat(){
        System.out.println("Generic Animal Eating Generically");
    }
}

class Horse extends Animal{
    public void eat(){
        System.out.println("Horse eating hay, oats, and horse treats");
    }
}
Run Code Online (Sandbox Code Playgroud)

在Horse类中,为什么我不能像这样编写代码:

private void eat(){
    System.out.println("Horse eating hay, oats, and horse treats");
}
Run Code Online (Sandbox Code Playgroud)

要么

protected void eat(){
    System.out.println("Horse eating hay, oats, and horse treats");
}
Run Code Online (Sandbox Code Playgroud)

Sur*_*tta 6

还记得每个孩子都是父母的原则吗?

假设您已创建实例

Animal animal = new Horse();
Run Code Online (Sandbox Code Playgroud)

当有人做 animal.eat()现在应该发生的事情?

有动物eat()与足够的权限的方法和在同一时间,你有限制的访问eat()Horse,以private这意味着你只能访问内马的方法.游民.