【发布时间】:2017-12-19 04:17:38
【问题描述】:
我想知道: 为什么覆盖方法不能具有比被覆盖方法更严格的访问修饰符?
例如:
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");
}
}
在Horse类中,为什么我不能这样写代码:
private void eat(){
System.out.println("Horse eating hay, oats, and horse treats");
}
或
protected void eat(){
System.out.println("Horse eating hay, oats, and horse treats");
}
【问题讨论】:
-
你应该用
@Override注释一个被覆盖的函数 -
因为你不能调用
Animal animal = new Horse(); animal.eat()因为eat()方法是私有的。但是Animal类将其声明为公开的。这是没有意义的。
标签: java